Corriger la configuration MySQL pour le fichier Ruby on Rails Database.yml

88

J'ai cette configuration:

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

Et j'obtiens cette erreur:

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

Y a-t-il quelque chose d'évident que je fais mal?

GeekedOut
la source

Réponses:

196

Vous devez séparer l'hôte du numéro de port. Vous pourriez avoir quelque chose, comme:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: 127.0.0.1
  port: 3306
Amokrane Chentir
la source
2
et l'hôte ne peut pas êtrehost: localhost
Adrian C.
Pour des raisons de sécurité, l'utilisation rootde la base de données de production est généralement considérée comme une mauvaise pratique . Pour configurer un utilisateur dédié pour votre application rails, consultez la documentation MySQL sur la création d'utilisateurs .
Feliks Montez
1
Aussi pour des raisons de sécurité (si vous utilisez le contrôle de version), vous ne devez pas stocker votre mot de passe de base de données dans database.yml. , Faites place ce que user3118220 a fait et obtenir de votre environnement: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez
17

Vous pouvez également faire comme ceci:

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
la source
2

Si vous pouvez avoir un fichier config / database.yml vide, définissez la variable ENV ['DATABASE_URL'], alors cela fonctionnera

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

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

user3118220
la source
2

Utilisez 'utf8mb4' comme encodage pour couvrir tous les Unicode (y compris les 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") %>

( Référence1 ) ( Référence2 )

botibs
la source
0

Si vous disposez de plusieurs bases de données à tester et à développer, cela peut vous aider

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
Meule
la source
1
en quoi est-ce shostdifférent de host?
konyak