Ruby on rails:如何在服务器启动时自动运行后台任务?

时间:2016-08-01 16:14:29

标签: ruby-on-rails ruby rubygems

我创建了一个运行后台进程的rails应用程序。它会定期ping服务器并显示响应时间的图表。为此我使用了一个名为crono的宝石。我正在使用'bundle exec crono'从命令行启动任务。

如何在rails服务器启动时自动运行后台进程而无需从命令行启动它?

此外,有没有办法定期自动刷新页面,以便显示更新的图表?

编辑:此应用程序将部署到生产中 编辑:我仍然无法让这个工作。这是文件夹结构:

  

应用/配置/
      ping_job.rb
      cronotab.rb

cronotab使用'crono'gem来每隔5秒执行ping_job.rb中的任务。

  

要求'typhoeus'   班级平交   def peform

  #task定义在这里。

  结束
  端

我想在服务器启动时自动运行ping_job.rb中定义的任务。我想随时随地使用宝石。欢迎提出任何建议。

2 个答案:

答案 0 :(得分:2)

将它放在Rails.application.initialize!下的config / environment.rb中,运行它以启动rails服务器,因此将在应用程序初始化后运行

答案 1 :(得分:1)

前段时间我想和铁路服务器的启动以及你一起开始后台流程。最后我发现这是个坏主意。我认为最好的解决方案是创建一个部署任务,在每次部署时启动并重新启动该流程。例如,capistrano允许这样做:

namespace :deploy do
  task :start do
    invoke 'my_process:start'
  end

  task :stop do
    invoke 'my_process:stop'
  end

  task :restart do
    invoke 'my_process:start'
    invoke 'my_process:stop'
  end
end

namespace :my_process
  task :start do
    execute "some system command to start the process"
  end

  task :stop do
    execute "some system command to stop the process"
  end
end

永远不要在Rails初始化文件中启动您的进程。当服务器上的应用程序工作者很少时,它可能会多次启动该过程。或者它可能会在您启动Rails控制台等时启动该过程。