我有一个使用Rufus Scheduler的rails应用程序。当我用:
打开rails服务器时rails s --port=4000
Rufus调度程序运行其任务。如果我使用:
运行rails服务器rails s --port=4000 --daemon
鲁弗斯不再完成任务。我添加了几条日志消息。这是日程安排代码:
class AtTaskScheduler
def self.start
scheduler = Rufus::Scheduler.new
p "Starting Attask scheduler"
scheduler.every('5m') do
# test sending hip chat message
issue = Issue.new
issue.post_to_hipchat("Starting sync with AtTask","SYNC")
p "Launching Sync"
Issue.synchronize
end
end
end
Hipchat永远不会从调度程序获取消息,并且日志永远不会得到语句"启动同步"。
关于可能导致此问题的任何想法?
答案 0 :(得分:2)
rufus-scheduler docs中有关于此问题的文档:
有一个方便的
rails server -d
启动开发Rails 一个守护进程。令人讨厌的是,如上所示的调度程序是 在主进程中启动,然后进行分叉和守护。该 rufus-scheduler线程(和任何其他线程)丢失,没有调度 发生的情况。我避免在开发模式下运行
-d
并且担心守护进程 仅用于生产部署。这是关于流程守护进程的两篇精心设计的文章,请 读他们:
- http://www.mikeperham.com/2014/09/22/dont-daemonize-your-daemons/
- http://www.mikeperham.com/2014/07/07/use-runit/
如果无论如何,您需要
rails server -d
之类的内容,为什么不试试bundle exec unicorn -D
代替?在我(有限)的经验中,它开箱即用(好吧, 必须先将gem 'unicorn'
添加到Gemfile
。