我在Rails 3.2上有一个应用程序,该应用程序部署在Heroku
unicorn
上。它需要每小时执行一项工作。所以我添加了heroku提供的Heroku Scheduler
Addon。
我还在我的应用中集成了Sidekiq
和Redis
。
以下是代码段:
配置/初始化/ sidekiq.rb
Sidekiq.configure_server do |config|
config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?
配置/ unicorn.rb
worker_processes 2
timeout 30
preload_app true
before_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
end
Rails.logger.info('Disconnected from Redis')
sleep 1
end
after_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end
Sidekiq.configure_client do |config|
config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?
Rails.logger.info('Connected to Redis')
end
问题是:每当执行Heroku Scheduler中提到的rake任务时,都会出现以下错误:
Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (ECONNREFUSED)
试图弄清楚这里有什么问题?
更新: 另一方面,它只发生在Heroku调度程序任务中。其他后台工作正常。
答案 0 :(得分:4)
最后,通过将Sidekiq客户端配置添加到sidekiq.rb
来实现它。
Sidekiq.configure_server do |config|
config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?
Sidekiq.configure_client do |config|
config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?
答案 1 :(得分:0)
一种选择是将URL保留为空并将REDIS_PROVIDER环境变量设置为OPENREDIS_URL。