2015-04-05 37 views
5

Zainstalowałem mój VPS na rbenv-vars, znalazłem plik .rbenv-vars w katalogu config wewnątrz aplikacji rails. Udaje mi się załadować hasło do bazy danych wewnątrz, ale robię coś nie tak, ponieważ rake db:create daje mi błąd braku hasła. Rake działa, gdy piszę hasło jako ciąg.Rails 4.2 database.yml nie czyta zmiennych rbenv-vars

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 


uzyskać wszystkie zmienne Runn ing rbenv vars

ssh> rbenv vars

export DB_PASS='my_db_password' 
+0

jeśli załadujesz zmienną do pliku vars, prawdopodobnie chcesz przeładować powłokę – Fenec

Odpowiedz

1

mam ten sam problem. Wiem, że moje zmienne są ustawione prawidłowo

$ 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 

Wyniki w:

$ 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) 
... 

Może dlatego rbenv-vars nie została załadowana do mojego zmiennych sesji jeszcze?

Co ciekawe, kiedy kładę jawne wartości do config/database.yml, nie zainicjować tiny_tds na szynach serwera boot, ale na załadowanie pierwszego modelu:

$ 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, 
... 

Więc rbenv-vars wydaje się działać prawidłowo po szynach został uruchomione, ale nie podczas rozruchu?

+0

Masz podobny problem. Znalazłeś rozwiązanie? –

0

Miałem podobny problem z ustawieniem SECRET_KEY_BASE w secrets.yml ze zmiennej środowiskowej i był guided to a solution by an rbenv developer. Oto podstawowe wytłumaczenie:

Ogólnie, database.yml powinien mieć dostęp do zmiennych środowiskowych. Ale, dla jasnej komunikacji, pamiętajmy, że database.yml sam się nie ocenia; raczej proces, który rozpoczyna obciążeń Railsowych database.yml i ocenia zmienne w nim. Tak więc, moje pytanie jest dla Ciebie, kto/co zaczyna ten proces i jak?

Jak uruchamiasz aplikację Rails i określasz, że database.yml jest zepsuty? Czy używasz rails server lub bundle exec lub unicorn lub czegoś jeszcze? Do polecenia, którego używasz, możesz uruchomić which -a <command> i podać wynik?

W moim przypadku był przy użyciu Apache i pasażera, więc to może być rozwiązany poprzez dodanie następujących do konfiguracji Apache dla mojej aplikacji (tj /etc/apache2/sites-available/my_app.conf):

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