Konfigurasi MySQL yang benar untuk file Ruby on Rails Database.yml


90

Saya memiliki konfigurasi ini:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: mysql://127.0.0.1:3306

Dan saya mendapatkan kesalahan ini:

Unknown MySQL server host 'mysql://127.0.0.1:3306' (1)

Adakah sesuatu yang jelas bahwa saya melakukan kesalahan?

Jawaban:


198

Anda harus memisahkan host dari nomor port. Anda bisa mendapatkan sesuatu, seperti:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: 127.0.0.1
  port: 3306

3
dan pembawa acara tidak bisahost: localhost
— Adrian C.

Untuk alasan keamanan, umumnya dianggap praktik yang buruk untuk digunakan rootsebagai pengguna database produksi. Untuk mengatur pengguna khusus untuk aplikasi rails Anda, lihat dokumen MySQL tentang pembuatan pengguna .
— Feliks Montez

1
Juga untuk alasan keamanan (jika Anda menggunakan kontrol versi), Anda tidak boleh menyimpan kata sandi database Anda database.yml. Sebaliknya, melakukan apa user3118220 lakukan dan mendapatkannya dari lingkungan Anda: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
— Feliks Montez

17

Anda juga bisa melakukan seperti ini:

default: &default
  adapter: mysql2
  encoding: utf8
  username: root
  password:
  host: 127.0.0.1
  port: 3306

development:
  <<: *default
  database: development_db_name

test:
  <<: *default
  database: test_db_name

production:
  <<: *default
  database: production_db_name

3

Gunakan 'utf8mb4' sebagai encoding untuk mencakup semua unicode (termasuk emoji)

default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_bin
  username: <%= ENV.fetch("MYSQL_USERNAME") %>
  password: <%= ENV.fetch("MYSQL_PASSWORD") %>
  host:     <%= ENV.fetch("MYSQL_HOST") %>

( Referensi1 ) ( Referensi2 )


2

Jika Anda dapat memiliki file config / database.yml kosong lalu tentukan variabel ENV ['DATABASE_URL'], maka itu akan berfungsi

$ cat config/database.yml
 
$ echo $DATABASE_URL
mysql://root:my_password@127.0.0.1:3306/my_db_name

untuk Heroku: heroku config: set DATABASE_URL='mysql://root:my_password@host.com/my_db_name'


0

Jika Anda memiliki beberapa database untuk pengujian dan pengembangan, ini mungkin membantu

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost
test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost
production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost

1
apa shostbedanya dengan host?
— konyak

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.