为什么我的环境变量在初始化代码之前没有正确加载?

时间:2015-05-26 14:55:12

标签: ruby-on-rails ruby-on-rails-4

过去几天我花了redis / resque up并为我的项目运行。我的初始化程序中有一些代码告诉Resque要使用的redis的URL;此URL存储在环境变量中。初始化代码非常简单:

Resque.redis = Redis.new(url: "#{ENV['REDISTOGO_URL']}")

现在,当我运行rails server时,此代码运行正常。当我使用foreman(foreman start)启动服务器时,它也运行正常。但是,当我尝试运行控制台时,会出现以下错误:gems/redis-3.2.1/lib/redis/client.rb:405:in '_parse_options': invalid uri scheme '' (ArgumentError)。我是否尝试单独运行控制台(rails console)或工头(foreman run rails console)时出现此错误。

通过消除过程,我确定错误是由于上面的Resque initalization行。当我发表评论时,控制台启动没有任何问题。真正令人困惑的是,当我现在在我的工作控制台中执行该行时,它运行正常!经过一番探讨,似乎我的环境变量在初始化代码之前没有加载。

这是一个奇怪的。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

所以,经过大量挖掘,我发现这个问题似乎与Spring(添加到Rails 4.1)有关,后者在后台预加载了你的应用实例。

令人困惑的是,这只会影响我的代码中的Rails初始化程序...在加载控制台后,我可以毫无问题地访问正确的环境变量。

'修复'很简单。您只需在再次运行控制台之前运行spring stop。您还可以更新spring以关注任何环境文件,以便在将来更改时正确预加载它们。有关设置弹簧以正确观察env文件的更多详细信息,请参阅this SO answer