Kurz sehen:Rake nicht Rails.application.secrets
- scheint, dass Rake keinen Zugang zu
Rails.application.secrets
- was ist der Zweck der
config/secrets.yml
inconfig/database.yml
Datei dann hat?
In lang:
Wenn ich laufen
RAILS_ENV=production rake db:migrate
ich den Fehler Mysql2::Error: Access denied for user 'root'@'localhost' (using password: NO)
bekommen, obwohl ich die entsprechenden Werte in config/database.yml
angegeben und der Benutzer verbinden sollte nicht 'root' sein. Dies ist ein Auszug aus dem jeweiligen Konfigurationsdateien:
# config/database.yml
production:
<<: *default
adapter: mysql2
host: localhost
database: <%= Rails.application.secrets[:database][:name] %>
username: <%= Rails.application.secrets[:database][:username] %>
password: <%= Rails.application.secrets[:database][:password] %>
# config/secrets.yml
production:
secret_key_base: very-long-blah-blah-blah
database:
name: app_db_name
username: app_db_user
password: app_db_password
Es scheint, dass rake
keinen Zugang zu Rails.application.secrets
hat. Durchführung der Migration erfolgreich ist, wenn ich in database.yml
zum Beispiel explizit erforderlichen Werte gesetzt, wie folgt:
production:
<<: *default
adapter: mysql2
host: localhost
database: <%= Rails.application.secrets[:database][:name] || 'app_db_name' %>
username: <%= Rails.application.secrets[:database][:username] || 'app_db_user' %>
password: <%= Rails.application.secrets[:database][:password] || 'app_db_password' %>
Die oben beweist, dass Rails.application.secrets[:database][:name]
nichts auflöst.
Zugriff auf Rails.application.secrets
in rake
? Wäre das die richtige Lösung?
Ich weiß, dass ich ENV[VARNAME]
verwenden kann, um geheime Abschnitte von config/database.yml
zu füllen. Aber was ist der Zweck von config/secrets.yml
Datei dann?
Außerdem benutze ich Passenger, was bedeutet, dass Variablen in .bashrc
wird wahrscheinlich nicht zugänglich für den Webserver (Ich hatte dieses Problem mit secret_key_base
). Daher versuche ich die Verwendung von Umgebungsvariablen zu vermeiden. Ich will nicht, dass all meine Geheimnisse auf dem ganzen Server verschüttet werden.
Schienen-4.2.2, Ubuntu LTS 14.04
glaube nicht, das die Gesamtheit des Problems ist aber Sie haben die Produktion Host als localhost gesetzt. Wie sieht Ihre Produktionskonfiguration auf dem Server aus? Ich weiß, dass du kein Heroku verwendest, aber was ist mit dem Ausführen von 'heroku config' gleichzusetzen? – toddmetheny
Passenger hat keine Probleme mit Umgebungsvariablen, die in '.bashrc' gesetzt sind. –
@toddmethheny, was ist falsch daran,' localhost' zu haben? Die Anwendung und die Datenbank werden auf dem Sicherungsserver ausgeführt, und nach meinem Verständnis darf sich die Anwendung mithilfe von mysql socket als 'app_db_user' @ 'localhost' mit der Datenbank verbinden. –