首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Rails clockwork gem运行rake任务?

如何使用Rails clockwork gem运行rake任务?
EN

Stack Overflow用户
提问于 2012-07-17 05:47:23
回答 4查看 7.4K关注 0票数 11

从clockwork调用rake任务的语法是什么?我尝试了各种语法,但似乎都不起作用。(我对时钟工作特别感兴趣,因为Heroku支持它。)

下面是我的clock.rb,使用的语法与gem使用的语法相同:

代码语言:javascript
复制
module Clockwork
  puts "testing clockwork!"
  every(30.seconds, 'Send Messages') {
    rake 'scheduler:send_messages'
    }
end

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

代码语言:javascript
复制
task :send_messages => :environment do
  puts "rake task run successfully!"
end

这是当我开始一个发条程序时会发生的事情:

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

EN

回答 4

Stack Overflow用户

发布于 2012-07-17 12:27:20

rake不是一个方法,所以您不能在这里像这样调用它。

您可以通过shell调用它,如下所示

代码语言:javascript
复制
every(30.seconds, 'Send Messages') {
  `rake scheduler:send_messages`
}

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

代码语言:javascript
复制
Heroku::API.new.post_ps('your-app', 'rake scheduler:send_messages')

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

票数 10
EN

Stack Overflow用户

发布于 2014-12-19 11:11:17

您可以将一个块传递给every,它执行您的rake任务:

代码语言:javascript
复制
every(1.day, "namespace:task") do
  ApplicationName::Application.load_tasks
  Rake::Task['namespace:task'].invoke
end
票数 4
EN

Stack Overflow用户

发布于 2013-07-03 18:21:54

可以将以下方法添加到clock.rb文件中:

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

然后调用

代码语言:javascript
复制
execute_rake("your_rake_file.rake","your:rake:task")

在你的处理程序中

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11513058

复制
相关文章

相似问题

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