带有Sidekiq和redis的Heroku调度程序

时间:2013-03-25 07:14:47

标签: ruby-on-rails heroku redis sidekiq

我在Rails 3.2上有一个应用程序,该应用程序部署在Heroku unicorn上。它需要每小时执行一项工作。所以我添加了heroku提供的Heroku Scheduler Addon。

我还在我的应用中集成了SidekiqRedis

以下是代码段:

配置/初始化/ 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调度程序任务中。其他后台工作正常。

2 个答案:

答案 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。