首页 > 解决方案 > Heroku 在 Rails 4 应用程序中调用 Resque.enqueue 时连接到 Redis localhost

问题描述

在 Heroku 中,当运行 Resque.enqueue 命令时,Heroku 会尝试通过 localhost 连接到 redis。在 config/initializers/redis.rb 中,正确的 URL 设置为 $redis = Redis.new(url: ENV['REDIS_URL']) 并且 $redis 实例化没有错误。在调用 enqueue 方法的控制器中 $redis.inspect 返回正确的值。

收到的错误是:Redis::CannotConnectError(在 localhost:6379 (Errno::ECONNREFUSED) 上连接到 Redis 时出错):

宝石文件

gem 'rails', '4.2.6' 
gem 'redis', "~> 4.1.0"
gem 'resque', "~> 1.27.3"

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

if Rails.env.production?
  $redis = Redis.new(url: ENV['REDIS_URL'])
  puts "$redis.inspect => #{$redis.inspect} "
end

lib/tasks/resque.rake

require "resque/tasks"
task "resque:setup" => :environment

rakefile 任务 "resque:preload" => :environment

过程文件

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: env QUEUE=* bundle exec rake resque:work

标签: ruby-on-rails-4herokuredisresque

解决方案


问题已解决,redis 指向 Heroku 中的正确服务器。

在 config/initializers/redis.rb

改变了这个:

  $redis = Redis.new(url: ENV['REDIS_URL'])

对此:

  $redis = Resque.redis = Redis.new(url: ENV['REDIS_URL'])

推荐阅读