Configurazione corretta di MySQL per il file Ruby on Rails Database.yml


88

Ho questa configurazione:

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

E ricevo questo errore:

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

C'è qualcosa di ovvio che sto facendo in modo errato?

Risposte:


196

È necessario separare l'host dal numero di porta. Potresti avere qualcosa, come:

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

2
e l'ospite non può esserehost: localhost
Adrian C.

Per motivi di sicurezza, è generalmente considerata una cattiva pratica da utilizzare rootcome utente del database di produzione. Per impostare un utente dedicato per la tua app rails, consulta i documenti MySQL sulla creazione dell'utente .
Feliks Montez

1
Inoltre, per motivi di sicurezza (se stai usando il controllo della versione) non dovresti memorizzare la password del database in database.yml. Invece, fare ciò che ha fatto e user3118220 ottenere dal proprio ambiente: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez

17

Puoi anche fare così:

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

Se puoi avere un file config / database.yml vuoto, definisci la variabile ENV ['DATABASE_URL'], allora funzionerà

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

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


2

Usa 'utf8mb4' come codifica per coprire tutti gli unicode (inclusi gli 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") %>

( Riferimento1 ) ( Riferimento2 )


0

Se disponi di più database per test e sviluppo, questo potrebbe essere d'aiuto

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
come è shostdiverso da host?
konyak

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.