我想从delayed_job运行rake任务(apn:notifications:从apn_on_rails gem提供)。换句话说,我想入队一个延迟的工作,它会调用apn:notifications:传递rake任务。我如何从delayed_job运行rake任务
我发现这个代码http://pastie.org/157390从http://geminstallthat.wordpress.com/2008/02/25/run-rake-tasks-with-delayedjob-dj/。
我加入这个代码DelayedRake.rb到我的lib目录:
require 'rake'
require 'fileutils'
class DelayedRake
def initialize(task, options = {})
@task = task
@options = options
end
##
# Called by Delayed::Job.
def perform
FileUtils.cd RAILS_ROOT
@rake = Rake::Application.new
Rake.application = @rake
### Load all the Rake Tasks.
Dir[ "./lib/tasks/**/*.rake" ].each { |ext| load ext }
@options.stringify_keys!.each do |key, value|
ENV[key] = value
end
begin
@rake[@task].invoke
rescue => e
RAILS_DEFAULT_LOGGER.error "[ERROR]: task \"#{@task}\" failed. #{e}"
end
end
end
一切都正常运行,直到delayed_job的运行,并抱怨:
[错误]:任务“APN:通知:提供“失败。不知道如何构建任务'apn:notifications:deliver'
如何让它知道apn_on_rails?我曾尝试在DelayedRake的顶部请求'apn_on_rails_tasks',它没有做任何事情。我也尝试将rake任务的目录更改为./lib/tasks/*.rake
我对Ruby/Rails有点新鲜。这在heroku上运行在2.3.5上。
这很棒!我将如何发送@options到任务?现在我打电话: – rmw 2010-11-15 16:34:24
系统“耙#{@任务}”我可以做系统“耙#{@任务}#{@选项}”? – rmw 2010-11-15 16:34:59