2013-07-22 12 views
9

में एक और कार्य कैसे कॉल करूं हालांकि यह आपके यहां पाए गए अन्य प्रश्नों के समान ही हो सकता है, थोड़ी मोड़ है। मेरे पास दो निर्देशिकाएं हैं, कहें/घर/रेल/रेक और/होम/रेल/test_app। रेल निर्देशिका वह जगह है जहां मैं अपनी सभी रेल परियोजनाओं को रखता हूं।मैं रेक

रैक के अंदर, मैं एक Rakefile और एक create.rake फ़ाइल है।

यह वही मेरी rakefile देखो की तरह

namespace :setup do 
    desc "something" 
    task :init do 
     print "Name of the destination directory: " 
     name = STDIN.gets.strip 
     cp_r '.', "../#{name}/lib/tasks" 
     cd "../#{name}" 
     sh "rake setup:create" 

    end 
end 

और create.rake

namespace :setup do 
    desc "Install" 
    task :create do 
     sh 'git init' 
     #some other code 
    end 
end 

यह क्या करता है स्पष्ट है। मैं रेक निर्देशिका की सामग्री को/test_app/lib/कार्यों में कॉपी करना चाहता हूं। फिर test_app में निर्देशिका बदलें और सेटअप चलाएं: test.app/lib/कार्यों में स्थापित install.rake फ़ाइल में परिभाषित कार्य बनाएँ। यह काम करता है, लेकिन क्या यह करने का यह रेक तरीका है? क्या कोई मुझे थोड़ा सा संकेत दे सकता है कि यह कैसे किया जाता है, रेक रास्ता।

$ rake setup:init 
Name of the destination directory: 
testapp 
cp -r . ../testapp/lib/tasks 
cd ../testapp 
rake aborted! 
Don't know how to build task 'setup:create' 
/home/TradeRaider/rails/Rake/Rakefile:8:in `block (2 levels) in <top (required)>' 
/home/TradeRaider/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `eval' 
/home/TradeRaider/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `<main>' 
Tasks: TOP => setup:init 
(See full trace by running task with --trace) 

उत्तर

35

यह और अधिक रेक-ish :)

Rake::Task["setup:create"].invoke 
+0

मैंने वास्तव में इसे आजमाया, लेकिन यह मेरे मामले में काम नहीं कर रहा है। प्रारंभ में, जब मैं रेक सेटअप को कॉल करता हूं: init, यह ~/रेल/रेक/रेकैकाइल लाता है और इनिट कार्य निष्पादित करता है। यदि सेटअप: निर्माण को उसी फ़ाइल में परिभाषित किया गया था, तो मैं इनवॉक विधि का उपयोग कर सकता था। लेकिन मैं ~/रेल/testapp/lib/कार्यों में परिभाषित एक कार्य को कॉल करने की कोशिश कर रहा हूं। उस मामले में, यह काम नहीं करेगा। – TradeRaider

+0

या क्या मुझे कुछ याद आ रहा है? – TradeRaider

+0

अजीब लगता है, आपके पास क्या त्रुटि है? – apneadiving

4

हालांकि @apneadiving जवाब में मदद की, यह सिर्फ मुझे मारा है जो:

यहाँ त्रुटि जो मुझे मिलता है जब मैं आह्वान विधि का इस्तेमाल किया है मैं सचमुच बोलते हुए, एक और रेकैकाइल से रेकैकाइल को कॉल करने की कोशिश कर रहा था। वैसे भी, ऐसा करने के लिए, मैं पहले

रेक फ़ाइल को लोड करने,

load "../#{name}/lib/tasks/create.rake" 

(यह आवश्यकता होती भी चाल करना होगा) और फिर यह आह्वान किया था।

Rake::Task["setup:create"].invoke 
+0

साझा करने के लिए धन्यवाद! +1 – apneadiving

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