ruby-on-rails - Resque,Resque 服务器,在 RedisToGo 上与 Heroku

标签 ruby-on-rails ruby-on-rails-3 heroku redis resque

我一直试图让 Resque(使用 Resque 服务器)和 RedisToGo 在 heroku(cedar)上工作一段时间,但我一直遇到这个错误:

Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED)):

它在本地工作,我可以在 Heroku 的控制台中为我的应用正常访问 redis。

我的 Procfile 有:

web: bundle exec thin start -p $PORT -e $RACK_ENV
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
resque: env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake resque:work

我的 Gemfile 有:

gem 'redis'

#Background queue
gem 'resque', '~> 1.22.0', :require => "resque/server"

lib/tasks/resque.rake:

require 'resque/tasks'

task "resque:setup" => :environment do
  ENV['QUEUE'] = '*'
end

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"

路线.rb:

  mount Resque::Server.new, :at => "/resque" 

初始化器: redis.rb:

uri = URI.parse(ENV["REDISTOGO_URL"])
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.redis = REDIS

resque.rb:

Dir["#{Rails.root}/app/workers/*.rb"].each { |file| require file }
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }

然后在我的 app/workers 目录中我有类似 myjob.rb 的东西

我觉得我在这里兜圈子,有什么想法吗?

最佳答案

我认为您的 Procfile 有错字。为什么有两个 web 进程?我会坚持使用一个并使用 unicorn

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

unicornresque 一起使用时,每次都必须定义 resque redis 连接 unicorn fork 。这是相关文件。

config/initializers/redis.rb

uri = URI.parse(ENV["REDIS_WORKER"])
REDIS_WORKER = Redis.new(host: uri.host, port: uri.port, password: uri.password)

config/initializers/resque.rb

Resque.redis = REDIS_WORKER

config/unicorn.rb

before_fork do |server, worker|
  if defined?(Resque)
    Resque.redis.quit
    Rails.logger.info("Disconnected from Redis")
  end
end

after_fork do |server, worker|
  if defined?(Resque)
    Resque.redis = REDIS_WORKER
    Rails.logger.info("Connected to Redis")
  end
end

查看此 gist对于完整的 unicorn.rb

关于ruby-on-rails - Resque,Resque 服务器,在 RedisToGo 上与 Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12256476/

相关文章:

.net - 开始使用 Rails 或 Django 但切换到 "enterprise"解决方案的网站?

ruby-on-rails - 如何使用simple_form预先选择关联复选框

ruby-on-rails - 接受用于填充 `url_for` 方法的 URL 参数是否安全?

ruby-on-rails - Rails 日志过于冗长

ruby-on-rails - Rails ActiveRecord 模型链表

python - 为什么这些 apt-packages 在 Ubuntu 和 Heroku 上表现不一样?

database - Heroku pg :push command missing

ruby-on-rails - 无法找到 SOAP 操作 RAILS + SAVON

ruby-on-rails - 在 Rails 中更新没有回调的序列化属性

heroku - 在 yarn package.json 中使用环境变量