2013-07-22 14 views
9

Anche se questo potrebbe sembrare simile alle altre domande che trovi qui, c'è una leggera svolta. Ho due directory, ad esempio/home/rails/Rake e/home/rails/test_app. La directory rails è dove posiziono tutti i miei progetti di rotaie.Come chiamo un'altra attività in Rake

All'interno Rake, ho un Rakefile e un file dicreate.rake.

Questo è ciò che il mio rakefile look di come

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 

E create.rake

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

ciò che fa è evidente. Voglio copiare il contenuto della directory di Rake in/test_app/lib/tasks. Quindi cambia directory in test_app ed esegui setup: crea un'attività definita nel file install.rake ora posizionato in test_app/lib/tasks. Funziona, ma è questo il modo migliore per farlo? Qualcuno può darmi un leggero accenno a come è fatto, alla maniera di Rake.

Qui è l'errore che ottengo quando ho usato il metodo invoke:

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

risposta

35

Questo è più rake-ish :)

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

In realtà l'ho provato, ma non sembra funzionare nel mio caso. Inizialmente, quando chiamo setup rake: init, recupera ~/rails/Rake/Rakefile ed esegue l'attività init. Se setup: create era definito nello stesso file, avrei potuto usare il metodo invoke. Ma sto cercando di chiamare un'attività definita in ~/rails/testapp/lib/tasks. In tal caso, non funzionerebbe. – TradeRaider

+0

O mi manchi qualcosa? – TradeRaider

+0

sembra strano, che errore hai? – apneadiving

4

Sebbene risposta @apneadiving aiutato, appena mi ha colpito che Stavo cercando di chiamare un RakeFile da un altro Rakefile, letteralmente parlando. In ogni modo, per farlo, ho dovuto caricare prima il file rastrello,

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

(richiedendo sarà anche fare il trucco)

e poi richiamarlo.

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

grazie per aver condiviso! +1 – apneadiving

Problemi correlati