【发布时间】:2011-05-10 03:50:06
【问题描述】:
我想从 delay_job 运行 rake 任务(apn:notifications:deliver 来自 apn_on_rails gem)。换句话说,我想排队一个延迟的作业,它会调用 apn:notifications:deliver rake 任务。
我从http://geminstallthat.wordpress.com/2008/02/25/run-rake-tasks-with-delayedjob-dj/ 找到了这个代码http://pastie.org/157390。
我将此代码作为 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
在延迟作业运行并抱怨之前一切都运行良好:
[错误]:任务“apn:notifications:deliver”失败。不知道如何构建任务 'apn:notifications:deliver'
如何让它知道 apn_on_rails?我尝试过在 DelayedRake 顶部的 require 'apn_on_rails_tasks' 没有做任何事情。我还尝试将 rake 任务的目录更改为 ./lib/tasks/*.rake
我对 Ruby/Rails 有点陌生。这是在 heroku 上的 2.3.5 上运行的。
【问题讨论】:
标签: ruby-on-rails rake delayed-job