从clockwork调用rake任务的语法是什么?我尝试了各种语法,但似乎都不起作用。(我对时钟工作特别感兴趣,因为Heroku支持它。)
下面是我的clock.rb,使用的语法与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任务的语法。不幸的是,钟表自述文件帮不上忙:
发布于 2012-07-17 12:27:20
rake不是一个方法,所以您不能在这里像这样调用它。
您可以通过shell调用它,如下所示
every(30.seconds, 'Send Messages') {
`rake scheduler:send_messages`
}或者更确切地说,使用heroku API调用一个新的分离进程。这是我现在首选的方法:
Heroku::API.new.post_ps('your-app', 'rake scheduler:send_messages')可从heroku.rb:https://github.com/heroku/heroku.rb获得Heroku::API
发布于 2014-12-19 11:11:17
您可以将一个块传递给every,它执行您的rake任务:
every(1.day, "namespace:task") do
ApplicationName::Application.load_tasks
Rake::Task['namespace:task'].invoke
end发布于 2013-07-03 18:21:54
可以将以下方法添加到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")在你的处理程序中
https://stackoverflow.com/questions/11513058
复制相似问题