2013-07-22 6 views
9

Obwohl dies klingt ähnlich wie die anderen Fragen, die Sie hier finden, gibt es eine kleine Wendung. Ich habe zwei Verzeichnisse, sagen wir/home/rails/Rake und/home/rails/test_app. Im Rails-Verzeichnis platziere ich alle meine Rails-Projekte.Wie rufe ich eine andere Aufgabe in Rake

Innen Rake, ich habe eine Rakefile und eine create.rake Datei. Diese

ist, was meine Rakefile Look wie

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 

Und create.rake

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

Was sie tut, ist offensichtlich. Ich möchte den Inhalt des Rake-Verzeichnisses nach/test_app/lib/tasks kopieren. Wechseln Sie dann zu test_app und führen Sie setup: create task aus, die in der install.rake-Datei definiert ist, die jetzt in test_app/lib/tasks abgelegt ist. Das funktioniert, aber ist das der Rechenweg? Kann mir jemand einen kleinen Hinweis geben, wie es gemacht wird, der Rake-Weg. Hier

ist der Fehler, die ich bekomme, wenn ich invoke Methode verwendet:

$ 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) 

Antwort

35

Das ist mehr Rake-ish :)

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

Ich habe es tatsächlich versucht, aber es scheint nicht in meinem Fall zu funktionieren. Wenn ich rake setup: init anfange, ruft es zunächst die Datei ~/rails/Rake/Rakefile auf und führt die Init-Task aus. Wenn setup: create in derselben Datei definiert wäre, hätte ich die Methode invoke verwenden können. Aber ich versuche, eine in ~/rails/testapp/lib/tasks definierte Aufgabe aufzurufen. In diesem Fall würde es nicht funktionieren. – TradeRaider

+0

Oder fehlt mir etwas? – TradeRaider

+0

klingt komisch, welchen Fehler hast du? – apneadiving

4

Obwohl @apneadiving Antwort geholfen, es kam mir nur, dass Ich habe versucht, eine Rakefile von einem anderen Rakefile zu nennen, im wahrsten Sinne des Wortes. Wie auch immer, dies zu tun, musste ich zuerst die Rake-Datei laden,

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

(es erfordert, wird auch der Trick)

und dann aufrufen.

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

danke fürs Teilen! +1 – apneadiving

Verwandte Themen