Ruby on Rails Database.yml dosyası için MySQL yapılandırmasını düzeltin


90

Bu konfigürasyona sahibim:

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

Ve şu hatayı alıyorum:

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

Yanlış yaptığım apaçık bir şey var mı?

Yanıtlar:


198

Ana bilgisayarı bağlantı noktası numarasından ayırmalısınız. Şunun gibi bir şeye sahip olabilirsin:

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

3
ve ev sahibi olamazhost: localhost
Adrian C.

Güvenlik nedeniyle, rootüretim veritabanı kullanıcısı olarak kullanmak genellikle kötü bir uygulama olarak kabul edilir . Raylar uygulamanız için özel bir kullanıcı ayarlamak için, kullanıcı oluşturma hakkındaki MySQL belgelerine bakın .
Feliks Montez

1
Ayrıca güvenlik nedeniyle (sürüm kontrolü kullanıyorsanız) veritabanı parolanızı içinde saklamamalısınız database.yml. Bunun yerine, user3118220 yaptıklarını yapmak ve çevreden olsun: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez

17

Bunu da beğenebilirsiniz:

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

Tüm unicode'u (emojiler dahil) kapsayacak şekilde kodlama olarak 'utf8mb4' kullanın

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

( Referans1 ) ( Referans2 )


2

Boş bir config / database.yml dosyanız varsa, ENV ['DATABASE_URL'] değişkenini tanımlayın, o zaman çalışacaktır

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

Heroku için: heroku yapılandırması: set DATABASE_URL='mysql://root:my_password@host.com/my_db_name'


0

Test ve geliştirme için birden fazla veritabanınız varsa, bu yardımcı olabilir

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
nasıl shostfarklıdır host?
konyak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.