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.