我在heroku上运行一个应用程序。 Web工作者是在Grape框架中开发的。
由于Grape没有像config / initializers这样的东西,我在每次访问Resque之前都运行这样的代码:
HEROKU_REDIS_URL = "redis://redistogo:XXXXX@squawfish.redistogo.com:9990/"
uri = URI.parse(HEROKU_REDIS_URL)
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password, :thread_safe => false)
一段时间后,Resque工作人员停止从Redis获取工作,即使有些人在那里排队。在本地运行时一切正常。
知道我做错了什么吗?或者我应该在哪里放置Resque的Redis初始化?
答案 0 :(得分:0)
经过几个小时的调试后,我才开始工作。让我分享一下我的设置中出错的部分:
确保为网络服务器和工作进程分别仅为Resque分配redis :我最终得到了这样的代码:
require 'resque'
if ENV["REDIS_SERVICE"]
begin
Resque.redis.get('abc')
rescue Redis::CannotConnectError
HEROKU_REDIS_URL = "redis://redistogo:XXXXX@squawfish.redistogo.com:9990/"
uri = URI.parse(HEROKU_REDIS_URL)
Resque.redis = Redis.new(
:host => uri.host,
:port => uri.port,
:password => uri.password)
end
end
我把它放在app / resque_redis_init.rb中,并且在resque:setup
任务
确保您将队列中的作业排队并且这些作业具有正确的优先级对我来说,这是Procfile中的以下设置
resque: TERM_CHILD=1 VERBOSE=1 QUEUES=activity,polling bundle exec rake jobs:work
通过这种设置,它可以很好地工作。希望它对某些人有所帮助,因为非rails应用程序的文档不多。