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?
jeśli załadujesz zmienną do pliku vars, prawdopodobnie chcesz przeładować powłokę – Fenec