如何使用Rails发条gem来运行rake任务?
从发条中调用rake任务的语法是什么? 我尝试过各种语法,似乎没什么用。 (我对钟表工作特别感兴趣,因为Heroku支持它。)
这是我的clock.rb,使用的是when 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
您可以将以下方法添加到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任务的every
块:
every(1.day, "namespace:task") do ApplicationName::Application.load_tasks Rake::Task['namespace:task'].invoke end
- heroku运行rake db:migrate – / bin / sh:1:rake:not found
- 通过Heroku上托管的Rails上传和解压缩文件到S3?
- Heroku 500内部服务器错误未定义方法’用户名’为nil:NilClass
- 图像似乎被添加到桶中,无法在我的应用程序上查看它
- Heroku不显示SCSS背景图像
- Rails ArgumentError(缺少必需:bucket选项)修复不起作用?
- 向大量收件人发送电子邮件的最佳做法(Rails + SendGrid)
- 在Production中找不到文件’twitter / bootstrap’
- Nokogiri在Heroku上解析时添加了字符