首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用whenever运行递归ActiveJob

如何使用whenever运行递归ActiveJob
EN

Stack Overflow用户
提问于 2015-07-15 16:33:31
回答 2查看 1.2K关注 0票数 0

我需要在rails 4.2应用程序中运行循环作业。只要是gem我就会安装。

我创建了ActiveJob

代码语言:javascript
复制
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作业我添加了

代码语言:javascript
复制
every 10.minutes do
  runner "Analytics::CalculateAllJob"
end

每当-i时运行命令。他将更改写入crontab,然后从命令行运行cron命令:

代码语言:javascript
复制
/bin/bash -l -c 'cd /home/www/myproject && bin/rails runner -e development '\''Analytics::CalculateAllJob'\'' >> /home/www/myproject/log/cron.log 2>&1'

并获取

代码语言:javascript
复制
/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>'

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-07-16 07:43:38

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

工作代码:

app/job/analytics/calculate_all.rb

代码语言:javascript
复制
class Analytics::CalculateAll < ActiveJob::Base
  def perform(*args)
    ...
  end
end

config/shedule.rb

代码语言:javascript
复制
every 10.minutes do
  runner "Analytics::CalculateAll.perform_later"
end
票数 0
EN

Stack Overflow用户

发布于 2020-12-08 12:32:32

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

代码语言:javascript
复制
every 10.minutes do
  runner "Analytics::CalculateAll.new.perform_later"
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31425329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档