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?

GeekedOut
sumber

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
Amokrane Chentir
sumber
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
pangpang
sumber
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 )

botibs
sumber
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:[email protected]:3306/my_db_name

untuk Heroku: heroku config: set DATABASE_URL='mysql://root:[email protected]/my_db_name'

pengguna3118220
sumber
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
Rick
sumber
1
apa shostbedanya dengan host?
konyak