如何使用Rails的发条宝石运行rake任务?(How do I use Rails clockwo

2019-06-26 07:34发布

什么是从发条调用rake任务的语法? 我已经试过各种语法,并且似乎没有任何工作。 (我在钟表特别感兴趣,因为Heroku的支持它。)

这里是我的clock.rb,采用了宝石时使用相同的语法:

module Clockwork
  puts "testing clockwork!"
  every(30.seconds, 'Send Messages') {
    rake 'scheduler:send_messages'
    }
end

下面是在scheduler.rake我的耙子任务:

task :send_messages => :environment do
  puts "rake task run successfully!"
end

而这里的时候,我开始上了发条的过程会发生什么:

$ clockwork lib/clock.rb
testing clockwork!
I, [2012-07-16T14:42:58.107245 #46427]  INFO -- : Starting clock for 1 events: [ Send Messages ]
I, [2012-07-16T14:42:58.107364 #46427]  INFO -- : Triggering 'Send Messages'
attempting to run rake task!
E, [2012-07-16T14:42:58.107437 #46427] ERROR -- : undefined method `rake' for Clockwork:Module (NoMethodError)

这将运行每隔30秒。 正如你所看到的,clock.rb成功执行。 但我不能为我的生命找出语法运行rake任务。 发条自述是没有帮助的,遗憾的是:

https://github.com/tomykaira/clockwork

Answer 1:

rake不是方法,所以你不能调用它喜欢这里。

您可以掏出并调用它,像

every(30.seconds, 'Send Messages') {
  `rake scheduler:send_messages`
}

或者更确切地说,调用使用Heroku的API一个新的分离进程。 这是我的首选方法现在:

Heroku::API.new.post_ps('your-app', 'rake scheduler:send_messages')

Heroku的API ::可从heroku.rb: https://github.com/heroku/heroku.rb



Answer 2:

您可以在下面的方法添加到您的clock.rb文件:

def execute_rake(file,task)
require 'rake'
rake = Rake::Application.new
Rake.application = rake
Rake::Task.define_task(:environment)
load "#{Rails.root}/lib/tasks/#{file}"
rake[task].invoke
end

然后调用

execute_rake("your_rake_file.rake","your:rake:task")

在你的处理器



Answer 3:

你可以通过在一个块every执行您的耙子任务:

every(1.day, "namespace:task") do
  ApplicationName::Application.load_tasks
  Rake::Task['namespace:task'].invoke
end


文章来源: How do I use Rails clockwork gem to run rake tasks?