Corregir la configuración de MySQL para el archivo Ruby on Rails Database.yml

90

Tengo esta configuración:

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

Y recibo este error:

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

¿Hay algo obvio que estoy haciendo incorrectamente?

GeekedOut
fuente

Respuestas:

198

Debe separar el host del número de puerto. Podrías tener algo como:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: 127.0.0.1
  port: 3306
Amokrane Chentir
fuente
3
y el anfitrión no puede serhost: localhost
Adrian C.
Por razones de seguridad, generalmente se considera una mala práctica utilizarlo rootcomo usuario de la base de datos de producción. Para configurar un usuario dedicado para su aplicación rails, consulte los documentos de MySQL sobre la creación de usuarios .
Feliks Montez
1
Además, por razones de seguridad (si está utilizando el control de versiones), no debe almacenar la contraseña de su base de datos en formato database.yml. En su lugar, hacer lo que hicieron user3118220 y la recibe de su entorno: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez
17

También puedes hacer esto:

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
fuente
3

Use 'utf8mb4' como codificación para cubrir todos los Unicode (incluidos los emojis)

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

( Referencia1 ) ( Referencia2 )

botibs
fuente
2

Si puede tener un archivo config / database.yml vacío, defina la variable ENV ['DATABASE_URL'], entonces funcionará

$ cat config/database.yml
 
$ echo $DATABASE_URL
mysql://root:[email protected]:3306/my_db_name

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

user3118220
fuente
0

Si tiene varias bases de datos para pruebas y desarrollo, esto podría ayudar

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
Almiar
fuente
1
¿en qué se shostdiferencia de host?
Konyak