2

我在 Rails 3.2 上有一个应用程序,它部署Herokuunicorn. 它需要每小时执行一个作业。所以我添加Heroku Scheduler了heroku提供的插件。

我还集成SidekiqRedis我的应用程序。

以下是代码片段:

配置/初始化程序/sidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?

配置/独角兽.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 调度程序任务中。其他后台工作运行良好。

4

2 回答 2

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?
于 2013-03-25T15:10:00.107 回答
0

一种选择是将 URL 留空并将 REDIS_PROVIDER 环境变量设置为 OPENREDIS_URL。

于 2013-03-25T07:44:14.643 回答