gpt4 book ai didi

ruby-on-rails - Rufus-scheduler 仅在生产环境中运行一次

转载 作者:行者123 更新时间:2023-12-04 03:51:33 24 4
gpt4 key购买 nike

我每天使用 rufus-scheduler 从 Rails 服务器运行一个进程。出于测试目的,假设每 5 分钟一次。我的代码如下所示:

在 config/initializers/task_scheduler.rb 中

scheduler = Rufus::Scheduler::PlainScheduler.start_new
scheduler.every "10m", :first_in => '30s' do
# Do stuff
end

我也尝试过 cron 格式:

scheduler.cron '50 * * * *' do
# stuff
end

例如,让流程在整点后 50 分钟运行一次。

令人恼火的是它在我的本地机器上运行。该过程将定期运行并且正常工作。只有在我部署到生产的应用程序上,该过程才会运行一次,并且不会重复。

ps faux 显示 cron 正在运行,passenger 正在处理 rails 进程的启动,站点已被再次 ping,因此它知道它应该刷新,并且 production 显示了代码中的更改。唯一不同的是,在没有警告或错误的情况下,计划任务不会重复。

帮助!

最佳答案

您可能不应该在 Rails 服务器本身中运行 rufus-scheduler,尤其是在像 passenger 这样的多进程框架中。相反,您应该在守护进程中运行它。

我对正在发生的事情的理论:

Passenger 启动一个 ruby​​ 服务器进程,并使用它派生出其他服务器来处理请求。但由于 rufus-scheduler 在与主线程不同的线程中运行其作业,rufus 线程仅在原始 ruby​​ 进程中有效(ruby 的 fork 仅复制执行 fork 的线程)。这似乎是一件好事,因为它可以防止多个调度程序运行,但是......乘客可能会在某些情况下杀死 ruby​​ 进程 - 如果它杀死了原始进程,调度程序线程就会消失。

关于ruby-on-rails - Rufus-scheduler 仅在生产环境中运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com