簡體   English   中英

如何從delayed_job運行rake任務

[英]How can I run a rake task from a delayed_job

我想從delayed_job運行一個rake任務(apn:notifications:從apn_on_rails gem傳遞)。 換句話說,我想將一個延遲的工作排入隊列,這個工作將調用apn:notifications:提供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

一切運行良好,直到delayed_job運行,它抱怨:

[錯誤]:任務“apn:notifications:deliver”失敗。 不知道如何構建任務'apn:notifications:deliver'

我如何讓它知道apn_on_rails? 我試過在DelayedRake的頂部要求'apn_on_rails_tasks',它沒有做任何事情。 我還嘗試將rake任務目錄更改為./lib/tasks/*.rake

我對Ruby / Rails有些新意。 這是在heroku上運行2.3.5。

為什么不做系統調用?

system "rake apn:notifications:deliver"

我相信如果你把它稱為一個單獨的過程會更容易。 請參閱從Ruby運行命令的5種方法

def perform
  `rake -f #{Rails.root.join("Rakefile")} #{@task}`
end

如果要捕獲任何錯誤,則應捕獲STDERR ,如文章中所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM