不知道有没有人遇到过这个问题。 我正在使用 sucker_punch gem 版本 1.1 在 Passenger 3 上运行 Rails 3.2
我有一个长时间运行的 sucker_punch 作业(大约需要 10 个小时),它是一个夜间批处理。 我在 Phusion Passenger 上运行(我认为有 3 个工作线程)
status from passenger-status
----------- General information -----------
max = 3
count = 0
active = 0
inactive = 0
Waiting on global queue: 0
我的 sucker_punch 作业是异步执行的,作为作业的一部分,它会执行其他异步较小的 sucker_punch 作业(每个作业大约需要 30 秒)
我无法确切地确定发生了什么,但“有时”我长期运行的工作就此结束或似乎停止了。 我确实在整个 sucker_punch 作业中添加了一些调试代码
begin
rescue Exception => e
logger.error(e)
raise e
end
但是没有看到异常,所以假设我长时间运行的 sucker_punch 被停止而不是被杀死?或者潜在的某种僵局?
有趣的部分。有时我长时间运行的工作运行良好,有时则不然。
最佳答案
这是正确的。目前,Passenger 假设您的进程只处理网络请求,而不处理后台任务。正因为如此,Passenger 强制执行某些限制,以控制有缺陷的应用程序。其中一个限制是,如果一个进程被指示关闭,它必须在 1 分钟内完成;如果没有,Passenger 将强制其关闭。不幸的是,这本质上与在应用程序进程内运行后台任务的概念不兼容。
目前有一个 Unresolved 问题:https://github.com/phusion/passenger/issues/1211
也许我们将来会着手解决这个问题,但目前它还没有被视为高优先级项目。我建议您使用进程外后台工作系统,例如 Sidekiq。
关于ruby-on-rails - Sucker Punch Job 被 Passenger 杀死?还是死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708314/