过去几天我花了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行。当我发表评论时,控制台启动没有任何问题。真正令人困惑的是,当我现在在我的工作控制台中执行该行时,它运行正常!经过一番探讨,似乎我的环境变量在初始化代码之前没有加载。
这是一个奇怪的。非常感谢任何帮助!
答案 0 :(得分:1)
所以,经过大量挖掘,我发现这个问题似乎与Spring(添加到Rails 4.1)有关,后者在后台预加载了你的应用实例。
令人困惑的是,这只会影响我的代码中的Rails初始化程序...在加载控制台后,我可以毫无问题地访问正确的环境变量。
'修复'很简单。您只需在再次运行控制台之前运行spring stop
。您还可以更新spring以关注任何环境文件,以便在将来更改时正确预加载它们。有关设置弹簧以正确观察env文件的更多详细信息,请参阅this SO answer。