【问题标题】:Does delayed job run as a daemon?延迟作业是否作为守护进程运行?
【发布时间】:2011-04-05 13:04:38
【问题描述】:

delayed_job 似乎是一个用于调度要完成的任务的框架(通过 mysql 数据库)。

实际处理是通过 ruby​​ 完成的,并且该进程不作为守护进程运行,对吗?

即由我们决定通过 cron 作业以某种方式使 ruby​​ 着火,还是?

【问题讨论】:

    标签: ruby-on-rails ruby delayed-job


    【解决方案1】:

    Delayed Job 确实作为一个进程运行,甚至可以运行多个 worker。

    这些过程中的每一个都会完全加载您的 Rails 应用程序 - 在许多情况下这可能并不理想。

    您可以通过以下方式开始延迟工作:

    RAILS_ENV=production ruby script/delayed_job start -n 3
    

    在我自己的项目中,我使用bluepill 来确保任何崩溃的工作人员都重新启动:

    workers = 5
    app_name = "my_app"
    Bluepill.application("#{app_name}_delayed_job", :log_file => "#{app_home}/shared/log/bluepill.log") do |app|
      (0...workers).each do |i|
        app.process("delayed_job.#{i}") do |process|
          process.working_dir = "#{app_home}/current"
    
          process.start_grace_time    = 10.seconds
          process.stop_grace_time     = 10.seconds
          process.restart_grace_time  = 10.seconds
    
          process.start_command = "cd #{app_home}/current && RAILS_ENV=production ruby script/delayed_job start -i #{i}"
          process.stop_command  = "cd #{app_home}/current && RAILS_ENV=production ruby script/delayed_job stop -i #{i}"
    
          process.pid_file = "#{app_home}/shared/pids/delayed_job.#{i}.pid"
          process.uid = app_name # I install my applications under a user of the same name
          process.gid = app_name
        end
      end
    

    【讨论】:

    • 那么如何在服务器上运行延迟作业?您是否必须以某种方式手动启动该过程?
    • 在命令行执行这个:ruby script/delayed_job start
    猜你喜欢
    • 2023-03-02
    • 2017-07-08
    • 2011-09-09
    • 2018-04-01
    • 1970-01-01
    • 2012-12-03
    • 2011-08-25
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多