Ruby on rails rufus计划程序未在生产中运行

Ruby on rails rufus计划程序未在生产中运行,ruby-on-rails,linux,scheduled-tasks,passenger,Ruby On Rails,Linux,Scheduled Tasks,Passenger,我有一个运行在nginx&passenger下的rails服务器。我的scheduler.rb如下所示 require 'rufus-scheduler' my_awesome_job = Rufus::Scheduler.new my_awesome_job.cron '59 23 * * *' do #do something end 如果我将作业设置为接下来的2-3分钟(用于测试),一切正常。但这一次,因为我需要它在生产中,并不是每天23:59开始。我不知道问题出在哪里 谢谢。

我有一个运行在nginx&passenger下的rails服务器。我的
scheduler.rb
如下所示

require 'rufus-scheduler'
my_awesome_job = Rufus::Scheduler.new

my_awesome_job.cron '59 23 * * *' do
    #do something
end
如果我将作业设置为接下来的2-3分钟(用于测试),一切正常。但这一次,因为我需要它在生产中,并不是每天23:59开始。我不知道问题出在哪里


谢谢。

此问题很可能是由于在Phusion Passenger生成子进程(作为智能生成方法的一部分)后,Rufus调度程序后台线程被终止引起的

阅读。 你所面临的具体问题可能是

您需要使用文档中的机制来恢复Rufus调度程序线程。我不确定您需要进行哪个API调用,所以也许您可以询问Rufus调度器的作者

或者,您可以使用“直接”繁殖方法。它效率较低,但避免了类似这样的兼容性问题。

因此,我找到了答案

我在
nginx.conf
中添加了这两行(在
passenger\u启用之后;
):


这将保持一个乘客线程处于活动状态。

您是否检查了服务器上的crontab列表?您可以使用这个命令'crontab-l'来完成它,因为我没有crontab。我以为我不需要它。。。看起来我没有很好地阅读文档…看起来对我来说太复杂了。我将寻求其他更简单的方法。可能是gem。当涉及到执行模型(例如,使用线程)时,where与rufus调度器没有本质上的区别,并且您可能会遇到相同的问题。解决此问题的最简单方法是在Passenger中使用“直接”生成方法。我使用的是Passenger 5 standalone安装,我必须在哪里设置Passenger_生成方法:direct?@techspartans将
--spawn method direct
命令行参数传递给Passenger standalone。“Passenger start--spawn method direct”你能帮我解决这个问题吗
    rails_app_spawner_idle_time 0;
    passenger_min_instances 1;