web-dev-qa-db-fra.com

Comment définir Rails variables d'environnement dans le fichier database.yml?

Sur ma machine locale, je souhaite définir des variables d'environnement pour toutes les informations sensibles du fichier database.yml. Mon fichier ressemble à ceci:

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: <%= ENV['DATABASE_USERNAME'] %> 
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: <%= ENV['SOCKET'] %>

development:
  <<: *default
  database: <%= ENV['DEVELOPMENT_DATABASE'] %>

test:
  <<: *default
  database: #JetStreamIQ-2_0_test

production:
  <<: *default
  database: <%= ENV['PRODUCTION_DATABASE'] %>
  username: <%= ENV['DATABASE_USERNAME'] %> 
  password: <%= ENV['DATABASE_PASSWORD'] %>

Je pensais que je pouvais simplement définir ces variables d'environnement dans mon fichier .bashrc, mais cela ne semble pas fonctionner. Mon fichier .bashrc ressemble à ceci:

export DATABASE_USERNAME="root"
export DATABASE_PASSWORD="*****"
export SOCKET="/var/run/mysqld/mysqld.sock"
export DEVELOPMENT_DATABASE="shoppe_development"
export PRODUCTION_DATABASE="#"

Lorsque j'exécute mon serveur avec

Rails s

Je reçois une erreur qui dit:

Access denied for user 'root'@'localhost' (using password: YES)

Je comprends qu'il y a un problème avec le nom d'utilisateur et le mot de passe de la base de données en raison de la façon dont j'ai configuré mon fichier database.yml, mais je ne suis tout simplement pas sûr de ce que c'est.

Y a-t-il quelque chose de gros qui me manque ici? Toute aide serait très appréciée.

Merci!

17
Mark

J'aimerais offrir quelques conseils ici.

  1. Vous pouvez exécuter database.yml via erb pour tester ce que vous obtenez. Par exemple, erb config/database.yml. Cela vous aidera à déterminer quel est le problème.

  2. Vous pouvez découvrir chaque variable d'environnement définie dans votre shell avec la commande set. Cela vous permettra de confirmer que les variables d'environnement que vous attendez sont définies (dans .bashrc).

J'espère que cela vous sera utile.

30
Patrick Narkinsky

Il s'avère qu'après avoir modifié mon fichier bashrc, je devais quitter cette session de terminal et ouvrir un autre terminal pour que les modifications soient finalisées:/Après cela, mon application a démarré parfaitement.

4
Mark

Si vous ne souhaitez pas redémarrer votre terminal, il vous suffit d'exécuter votre fichier .bashrc:

source /path/to/.bashrc

dans le même terminal que votre Rails serveur.

2
dechimp

Est-ce une faute de frappe ou définissez-vous vraiment JETSTREAMIQ_DATABASE_PASSWORD mais en utilisant DATABASE_PASSWORD dans votre database.yml? Parce que ça le ferait.

Pouvez-vous vous connecter à mysql en utilisant les valeurs réelles directement en utilisant l'application de ligne de commande mysql?

1
Philip Hallstrom

vous devrez peut-être placer vos variables d'environnement en haut de .bashrc fichier. car il a un certain retour exécuté dans le fichier. donc il revient avant d'exécuter réellement votre commande export

quelque chose comme ça:

nano ~/.bashrc

export DATABASE_VAR="my_own_var"

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
1
Shimaa Marzouk