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?

GeekedOut
quelle

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
Amokrane Chentir
quelle
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
Pangpang
quelle
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:[email protected]:3306/my_db_name

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

user3118220
quelle
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 )

Botibs
quelle
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
Rick
quelle
1
Wie ist shostanders als host?
Konyak