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!
J'aimerais offrir quelques conseils ici.
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.
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.
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.
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.
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
?
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