2

我正在尝试将 Resque 工作人员添加到 Heroku 应用程序。该应用程序在我的开发环境中完美运行,但是当我部署到 Heroku 并尝试排队作业时,我得到以下信息:

Redis::InheritedError  Error
Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.

我已将 RedisToGo 添加到应用程序中,并仔细检查了 Redis URL 是否已提供给 Resque。也就是说,/config/initializers/redis.rb看起来像这样:

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

有谁知道我可能做错了什么?

4

2 回答 2

1

@dB`有两种方法可以做到这一点

a)升级Resque我想它解决了这个问题,因为他们在内部进行重新连接检查 这个这个

现在上面的问题是因为你的工作基本上是一个子进程,子进程从这里继承父进程的所有打开连接(redis连接也是)现在你的工作完成它关闭所有打开的连接,甚至是你共享的redis连接工人因此出现上述错误

这会导致提供第二个解决方案如果您没有考虑升级 resque,那么下面的解决方案可能会起作用

b)尝试在fork之后/之前在resque hook中创建一个新连接/重新连接现有的redis连接,我相信以上任何一种都对您有所帮助

这样,即使存在子进程,redis 连接也不会消失

希望这有帮助

于 2013-07-03T07:33:15.460 回答
0

当我问这个问题时,我试图在单独的 Heroku dyno 上运行我的 Resque 工作人员。最后,我放弃了这种方法,并尝试使用 Unicorn 在与我的网络服务器相同的测功机中运行它们。我按照此处的设置说明进行操作,一切正常。

于 2013-07-04T18:27:17.860 回答