2015-04-05 5 views
5

Mein VPS hat rbenv-vars installiert, ich habe gefunden .rbenv-Vars-Datei innerhalb der Config-Verzeichnis in Schienen App. Ich gebe vor, das Datenbankpasswort darin zu laden, aber ich mache etwas falsch, weil rake db:create mir einen Passwort-Fehler gibt. Rake funktioniert, wenn ich das Passwort als String schreibe.Rails 4.2 database.yml nicht lesen rbenv-vars Variablen

config/.rbenv-Vars

DB_PASS=my_db_password 

config/database.yml

password: $DB_PASS    # Doesn't work 
    #password: <%= ENV['DB_PASS'] %> # Doesn't work 
    # password: my_db_password  # Works 


ich alle Variablen runn ing rbenv vars

ssh> rbenv Vars

export DB_PASS='my_db_password' 
+0

Wenn Sie Variable in die VARS-Datei laden, möchten Sie wahrscheinlich Shell wieder laden – Fenec

Antwort

1

ich das gleiche Problem haben. Ich weiß, dass meine Variablen sind richtig eingerichtet

$ rbenv vars 
# /Users/dave/code/project/.rbenv-vars 
export SQL_SERVER_HOST='10.0.0.1' 
export SQL_SERVER_PORT='1433' 
export SQL_SERVER_USERNAME='project' 
export SQL_SERVER_PASSWORD='password' 
export SQL_SERVER_DATABASE='project-development' 

$ cat config/database.yml 
development: 
    adapter: sqlserver 
    host:  <%= ENV['SQL_SERVER_HOST'] %> 
    port:  <%= ENV['SQL_SERVER_PORT'] %> 
    username: <%= ENV['SQL_SERVER_USERNAME'] %> 
    password: <%= ENV['SQL_SERVER_PASSWORD'] %> 
    database: <%= ENV['SQL_SERVER_DATABASE'] %> 
    mode:  dblib 

Ergebnisse in:

$ rails c 
Inside TinyTds#initialize with {:dataserver=>nil, :host=>nil, :port=>nil, :username=>nil, :password=>nil, :database=>nil, :tds_version=>nil, :appname=>"project", :login_timeout=>nil, :timeout=>nil, :encoding=>nil, :azure=>nil} 
/Users/dave/code/project/.gems/bundler/gems/tiny_tds-afef8218c3c0/lib/tiny_tds/client.rb:65:in `initialize': missing :host option if no :dataserver given (ArgumentError) 
... 

Vielleicht ist es, weil rbenv-vars nicht die Variablen in meine Session noch geladen ist?

Interessanterweise, wenn ich explizite Werte in die config/database.yml setzen, ist es nicht tiny_tds auf Schienen Server-Boot nicht initialisiert werden, aber das erste Modell auf Laden:

$ rails c 
Loading development environment (Rails 4.2.2) 
[1] pry(main)> # No TinyTds#initialize!!! 
[2] pry(main)> User.first 
Inside TinyTds#initialize with {:dataserver=>nil, :host=>"10.0.0.1", :port=>1433, :username=>"project", :password=>"password", :database=>"project-development", :tds_version=>nil, :appname=>"project", :login_timeout=>nil, :timeout=>nil, :encoding=>nil, :azure=>nil} 
    SQL (0.6ms) USE [project-development] 
    User Load (3.7ms) EXEC sp_executesql N'SELECT [users].* FROM [users] ORDER BY [users].[id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY' 
=> #<User:0x007fb8a0929fe0 
id: 1, 
... 

So scheint rbenv-vars fein einmal zu arbeiten Schienen gewesen gebootet, aber nicht während des Bootens?

+0

Mit einem ähnlichen Problem. Hast du eine Lösung gefunden? –

0

Ich hatte eine ähnliche Problemeinstellung SECRET_KEY_BASE in secrets.yml von einer Umgebungsvariablen und war guided to a solution by an rbenv developer. Hier ist die grundlegende Erklärung:

Im Allgemeinen sollte database.yml Zugriff auf Umgebungsvariablen haben. Aber aus Gründen der klaren Kommunikation, lassen Sie uns daran denken, dass database.yml nicht selbst auswertet; eher, der Prozess, der startet Rails lädt database.yml und wertet Variablen darin aus. Also, meine Frage für Sie ist, wer/was beginnt diesen Prozess und wie?

Wie starten Sie Ihre Rails App und stellen fest, dass database.yml defekt ist? Verwenden Sie rails server oder bundle exec oder unicorn oder etwas anderes? Können Sie für den Befehl, den Sie verwenden, which -a <command> ausführen und mir das Ergebnis mitteilen?

In meinem Fall war ich mit Apache und Passagiere, so dies, indem Sie Folgendes in der Apache Config für meine Anwendung (dh /etc/apache2/sites-available/my_app.conf) aufgelöst werden kann:

PassengerRuby/home/my_username /. rbenv/shims/ruby ​​

Verwandte Themen