2014-12-31 23 views
9

Senza effettuare il cding nella directory root della mia applicazione Rails, come posso eseguire un comando Rails o Rake per quella applicazione.Come eseguo Rails/Rake da un'altra directory?

ho provato:

bundle exec rake my_tasks:do_stuff BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile 

tra le altre combinazioni, senza alcun risultato.

[Update]

La questione è in realtà duplice, fascio non sa dove il Gemfile è e rastrello non sa cosa per l'esecuzione.

Per utilizzare Bundler:

BUNDLE_GEMFILE=/PATH/TO/RAILS_APP/Gemfile bundle exec ... 

Nota che BUNDLE_GEMFILE deve andare prima di 'exec fascio'.

Per utilizzare Rake:

rake -f /PATH/TO/RAILS_APP/Rakefile my_task:do_stuff 

utilizzare la console di Rails:

???? 

devono ancora capire come inserire la console Rails da un'altra directory. Guardando il source, penso che potrebbe non essere possibile, perché alla fine fa File.join ('script', 'rails') per avviare il processo di rotaie.

+0

Ci sono [molte buone risposte qui] (http://stackoverflow.com/questions/1206545/run-rake-task-from-outside-rails-root) ma penso che la risposta migliore sia probabile che non dovresti Lo faccio :-). Mentre è possibile, finirai per scoprire che ogni singolo percorso a cui viene fatto riferimento nella chiamata di rake, quindi anche all'interno delle attività di rake chiamate, tutto viene confuso perché si aspettano di essere ancorati alla directory da cui viene eseguita l'attività. –

+0

Buon punto, Tom. Come dice Bill, i compiti devono essere agnostici di CWD. Per piccoli compiti, questo non dovrebbe essere un problema. Grazie! – Nejuf

risposta

10

Senza che tu mostri il messaggio di errore che stai ricevendo, suppongo che abbia meno a che fare con Bundler di Rake. Quando viene eseguito il comando rake, cerca un Rakefile che inizia nella directory corrente e attraversa l'albero finché non ne trova uno. È possibile sovrascrivere questo comportamento specificando esplicitamente un RakeFile nelle opzioni del comando rake. Questo viene fatto usando l'opzione -f <RAKEFILE>.

es.

bundle exec rake -f /PATH/TO/RAILS_APP/Rakefile -T 

Ricordarsi che le attività di Rake devono essere "agnostiche CWD". La maggior parte delle attività e degli script sono in quanto tendono a ottenere la directory di progetto in base a un percorso relativo a un file noto nell'albero delle directory. Probabilmente lo capisci già, ma vale la pena menzionarlo nel caso in cui le attività si aspettino che la directory di lavoro corrente sia effettivamente la root dei binari. Questo sarebbe un caso in cui la loro esecuzione al di fuori del progetto potrebbe potenzialmente essere pericoloso.

+0

Grazie per il doppio problema: bundle non ha trovato il gemfile e il rake non aveva il contesto giusto. La tua risposta ha corretto la parte del rake, grazie! Modificherò la mia risposta per riflettere i risultati. – Nejuf