首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Resque,Resque服务器,在RedisToGo上使用Heroku

Resque,Resque服务器,在RedisToGo上使用Heroku
EN

Stack Overflow用户
提问于 2012-09-04 03:38:00
回答 1查看 3.9K关注 0票数 8

我已经尝试让Resque (使用Resque服务器)& RedisToGo在heroku (雪松)上工作了一段时间,但是我一直遇到这样的错误:

代码语言:javascript
复制
Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED)):

它在本地工作,我可以在Heroku的控制台上为我的应用程序访问redis。

我的专利文件有:

代码语言:javascript
复制
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:

代码语言:javascript
复制
gem 'redis'

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

lib/任务/resque.rake:

代码语言:javascript
复制
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"

routes.rb:

代码语言:javascript
复制
  mount Resque::Server.new, :at => "/resque" 

初始化器: redis.rb:

代码语言:javascript
复制
uri = URI.parse(ENV["REDISTOGO_URL"])
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Resque.redis = REDIS

resque.rb:

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

然后,在我的应用程序/工人目录中,我有类似于myjob.rb的东西

我觉得我要在这里绕圈,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-01-31 22:05:29

我想你的Procfile有一个错误。为什么有两个web进程?我会坚持用独角兽。

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

当使用独角兽时,你必须定义每一次独角兽叉的红色连接。这是相关的文件。

配置/初始化器/redis.rb

代码语言:javascript
复制
uri = URI.parse(ENV["REDIS_WORKER"])
REDIS_WORKER = Redis.new(host: uri.host, port: uri.port, password: uri.password)

配置/初始化器/resque.rb

代码语言:javascript
复制
Resque.redis = REDIS_WORKER

config/unicorn.rb

代码语言:javascript
复制
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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12256476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档