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?

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

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

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 )


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:my_password@127.0.0.1:3306/my_db_name

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


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

1
¿en qué se shostdiferencia de host?
Konyak

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.