【问题标题】:How to run recurring ActiveJob with whenever gem如何使用每当 gem 运行重复的 ActiveJob
【发布时间】:2015-10-04 04:39:46
【问题描述】:

我需要在 rails 4.2 应用程序中运行重复作业。我在任何时候安装 gem。

我创建 ActiveJob

class Analytics::CalculateAllJob < ActiveJob::Base
  queue_as :default

  def perform(*args)
    orgs = Org.all
    orgs.each do |org|
      org.departments
      Rails.logger.info "Scheduled a job to calculate Analytics"
    end
  end
end

我在 shedule.rb 中添加了 cron 作业

every 10.minutes do
  runner "Analytics::CalculateAllJob"
end

只要 -i 就运行命令。他将更改写入 crontab 我从命令行运行 cron 命令:

/bin/bash -l -c 'cd /home/www/myproject && bin/rails runner -e development '\''Analytics::CalculateAllJob'\'' >> /home/www/myproject/log/cron.log 2>&1'

得到

/home/www/.rvm/gems/ruby-2.2.0@rails420/gems/railties-4.2.0/lib/rails/commands/runner.rb:62:in `<top (required)>': uninitialized constant Analytics::CalculateAllJob (NameError)
from /home/www/.rvm/gems/ruby-2.2.0@rails420/gems/railties-4.2.0/lib/rails/commands/runner.rb:62:in `eval'
from /home/www/.rvm/gems/ruby-2.2.0@rails420/gems/railties-4.2.0/lib/rails/commands/runner.rb:62:in `<top (required)>'
from /home/www/.rvm/gems/ruby-2.2.0@rails420/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:123:in `require_command!'
from /home/www/.rvm/gems/ruby-2.2.0@rails420/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:90:in `runner'
from /home/www/.rvm/gems/ruby-2.2.0@rails420/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /home/www/.rvm/gems/ruby-2.2.0@rails420/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>'
from /home/www/myproject/bin/rails:8:in `<top (required)>'
from /home/www/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /home/www/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from -e:1:in `<main>'

我做错了什么?

【问题讨论】:

    标签: ruby-on-rails cron whenever


    【解决方案1】:

    您应该在调用perform 之前创建一个作业实例。

    every 10.minutes do
      runner "Analytics::CalculateAll.new.perform_later"
    end
    

    【讨论】:

      【解决方案2】:

      解决了。我的错误是调用类名。

      工作代码:

      app/jobs/analytics/calculate_all.rb

      class Analytics::CalculateAll < ActiveJob::Base
        def perform(*args)
          ...
        end
      end
      

      config/shedule.rb

      every 10.minutes do
        runner "Analytics::CalculateAll.perform_later"
      end
      

      【讨论】:

        猜你喜欢
        • 2020-06-02
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 2016-04-11
        • 2021-07-18
        • 1970-01-01
        • 2016-11-05
        相关资源
        最近更新 更多