ruby-on-rails - Sucker Punch Job 被 Passenger 杀死?还是死锁?

标签 ruby-on-rails passenger sucker-punch

不知道有没有人遇到过这个问题。 我正在使用 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/

相关文章:

javascript - 如何在 Rails 应用程序中从 Javascript 写入 Heroku 的日志?

ruby-on-rails - Elasticsearch::Transport::Transport::Errors::NotFound ([404] {"error": {"root_cause":[ {"type":"index_not_found_exception"

ruby-on-rails - 使用 RVM 为不同的 Ruby 版本编译 Passenger Native 支持

ruby-on-rails - sucker_punch worker 可以在 heroku 上运行多长时间?

ruby - 等待 SuckerPunch::Job 任务完成

ruby-on-rails - 未定义的方法 'default_spec_cache_dir'

ruby-on-rails - 避免在 has_many :through 中重复的 Rails 习惯用法

ruby-on-rails - Rails : How should Phusion Passenger and I18n. 区域设置行为?

ruby-on-rails - Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError 在应用程序中使用引擎、nginx、乘客