2010-11-15 16 views
5

से रेक रेक कैसे चला सकता हूं, मैं देरी_बॉज से एक रेक कार्य (apn: अधिसूचनाएं: apn_on_rails मणि से वितरित करना) चलाने के लिए चाहता हूं। दूसरे शब्दों में, मैं देरी वाली नौकरी को एनक्यू करना चाहता हूं जो एपीएन को कॉल करेगा: अधिसूचनाएं: रेक कार्य प्रदान करें।मैं देरी_job

मुझे यह कोड http://pastie.org/157390http://geminstallthat.wordpress.com/2008/02/25/run-rake-tasks-with-delayedjob-dj/ से मिला। delayed_job रन तक

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 

सब कुछ ठीक चलता है और यह शिकायत:

मैं अपने lib निर्देशिका के लिए DelayedRake.rb के रूप में इस कोड को जोड़ा

[ERROR]: कार्य "APN: अधिसूचना: उद्धार " अनुत्तीर्ण होना। पता नहीं कैसे कार्य 'एपीएन: नोटिफिकेशन:'

मैं इसे apn_on_rails के बारे में कैसे बता सकता हूं? मैं DelayedRake के शीर्ष पर 'apn_on_rails_tasks' की आवश्यकता होगी जिसने कुछ भी नहीं किया। मैंने रेक कार्यों की निर्देशिका को बदलने की भी कोशिश की ./lib/tasks/*.rake

मैं रूबी/रेल के लिए कुछ नया हूं। यह Heroku पर 2.3.5 पर चल रहा है।

उत्तर

6

केवल सिस्टम कॉल क्यों न करें?

system "rake apn:notifications:deliver" 
+0

यह बहुत अच्छा काम करता है! मैं कार्य को @ विकल्प कैसे भेजूंगा? अभी मैं कॉल कर रहा हूं: – rmw

+0

सिस्टम "रेक # {@ टास्क}" क्या मैं सिस्टम "रेक # {@ टास्क} # {@ विकल्प}" कर सकता हूं? – rmw

1

मुझे विश्वास है कि अगर आप इसे एक अलग प्रक्रिया के रूप में कहते हैं तो यह आसान है। 5 ways to run commands from Ruby देखें।

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

आप किसी भी त्रुटि के कब्जा करने के लिए चाहते हैं, आप STDERR पर कब्जा करना चाहिए के रूप में लेख में दर्शाये गये।

संबंधित मुद्दे