2013-07-22 10 views
9

これは他の質問と似ているかもしれませんが、ここには少しの歪みがあります。/home/rails/Rakeと/ home/rails/test_appという2つのディレクトリがあります。レールディレクトリは、すべての私のレールプロジェクトを配置する場所です。Rakeで別のタスクを呼び出すには

Rake内では、私はRakefilecreate.rakeファイルを持っています。

は、これは何

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

が明らかなものを

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のように私のrakefile表情のです。 Rakeディレクトリの内容を/ test_app/lib/tasksにコピーしたいと思います。次に、ディレクトリをtest_appに変更し、test_app/lib/tasksに配置されたinstall.rakeファイルで定義されたsetup:create taskを実行します。これはうまくいきますが、これを実行するレーキの方法ですか?誰も私にそれがどのように行われたのか、レイクのやり方についての少しのヒントを与えることができます。

$ 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

これは、より多くの熊手っぽい:)

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

実際に試しましたが、私の場合はうまくいかないようです。最初にrake setup:initと呼ぶと、〜/ rails/Rake/Rakefileを取り出してinitタスクを実行します。もしsetup:createが同じファイルに定義されていれば、私はinvokeメソッドを使うことができました。しかし、私は〜/ rails/testapp/lib/tasksに定義​​されたタスクを呼び出そうとしています。その場合、動作しません。 – TradeRaider

+0

何か不足していますか? – TradeRaider

+0

は奇妙に聞こえますが、どのようなエラーがありますか? – apneadiving

4

@apneadiving答えが助けたものの、それだけでことを私を襲ったです。ここ

は私がinvokeメソッドを使用する場合取得エラーです文字通り、私は別のRakefileからRakefileを呼び出そうとしていました。とにかく、そうするために、私は(それはまた、トリックを行います必要)、最初のすくいファイルをロードするために

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

を持っていた

し、それを呼び出します。

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

共有ありがとう! +1 – apneadiving

関連する問題