Korrigieren Sie die MySQL-Konfiguration für die Datei Ruby on Rails Database.yml


88

Ich habe diese Konfiguration:

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

Und ich bekomme diesen Fehler:

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

Gibt es etwas Offensichtliches, das ich falsch mache?

Antworten:


196

Sie sollten den Host von der Portnummer trennen. Sie könnten etwas haben, wie:

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

2
und Gastgeber kann nicht seinhost: localhost
Adrian C.

Aus Sicherheitsgründen wird die Verwendung rootals Benutzer der Produktionsdatenbank im Allgemeinen als schlechte Praxis angesehen . Informationen zum Einrichten eines dedizierten Benutzers für Ihre Rails-App finden Sie in den MySQL-Dokumenten zur Benutzererstellung .
Feliks Montez

1
Auch aus Sicherheitsgründen (wenn Sie die Versionskontrolle verwenden) sollten Sie Ihr Datenbankkennwort nicht in speichern database.yml. Tun Sie stattdessen das, was user3118220 getan hat, und holen Sie es aus Ihrer Umgebung : password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez

17

Sie können auch Folgendes tun:

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

2

Wenn Sie eine leere Datei config / database.yml haben können, definieren Sie die Variable ENV ['DATABASE_URL'], dann funktioniert es

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

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


2

Verwenden Sie 'utf8mb4' als Codierung, um alle Unicodes (einschließlich Emojis) abzudecken.

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

( Referenz1 ) ( Referenz2 )


0

Wenn Sie mehrere Datenbanken zum Testen und Entwickeln haben, kann dies hilfreich sein

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
Wie ist shostanders als host?
Konyak

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.