簡體   English   中英

如何使用 Rails clockwork gem 運行 rake 任務?

[英]How do I use Rails clockwork gem to run rake tasks?

從 clockwork 調用 rake 任務的語法是什么? 我嘗試了各種語法,但似乎沒有任何效果。 (我對發條特別感興趣,因為 Heroku 支持它。)

這是我的 clock.rb,使用與 whenever gem 使用相同的語法:

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

這是我在 scheduler.rake 中的 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

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

您可以將塊傳遞給執行 rake 任務的every塊:

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

您可以將以下方法添加到您的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")

在你的處理程序中

使用Rake::Task['...'].invoke任務第一次運行良好,但需要重新啟用該任務以便稍后再次調用。

    ApplicationName::Application.load_tasks

    module Clockwork do
        every(10.minutes, "namespace:task") do
          Rake::Task['namespace:task'].invoke
          Rake::Task['namespace:task'].reenable
        end
    end

否則,任務將在第一次被調用,但之后不會再被調用,直到發條進程重新啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM