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)
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
O mi manchi qualcosa? – TradeRaider
sembra strano, che errore hai? – apneadiving