2015-03-22 10 views
11

Qual è la differenza tra l'uso di bin/rake e bundle rake exec. E quale è uno stile preferito?Qual è la differenza tra bin/rake e rake exec bundle

bin/rake db:migrate 
bundle exec rake db:migrate 
+0

+ quando abbiamo bisogno di exec fascio e quando no? –

+1

Controlla questa risposta http://stackoverflow.com/questions/8275885/use-bundle-exec-rake-or-just-rake#answer-8275912 –

+0

Fai clic qui per ulteriori chiarimenti su https://stackoverflow.com/questions/6588674/what-does-bundle-exec-rake-mean – jso1919

risposta

-2

hai 3 opzioni su un tipico sistema:

  1. bin/rake db:migrate
  2. rake db:migrate
  3. bundle exec db:migrate

La prima opzione è semplicemente chiamando il percorso del programma rake, il cui launcher può essere trovato nellonascosto Cartella. Questo launcher di solito è solo un link simbolico al contenuto del programma trovato nella tua directory /.rvm. Puoi trovare la posizione originale eseguendo $ which rake, che ti darà qualcosa come /home/ubuntu/.rvm/gems/[email protected]/bin/rake.

Per impostazione predefinita, la seconda opzione è essenzialmente uguale alla prima sulla maggior parte dei sistemi. È quello che viene chiamato un alias, che è fondamentalmente solo un comando abbreviato per qualche altro programma. Questo è definito da qualche parte nelle impostazioni della shell come qualcosa come alias rake='/bin/rake'. È possibile che questo alias sia indirizzato a un programma diverso sulla tua macchina, quindi controlla prima di prendere la mia parola.

Quando si utilizza bundle exec, si sta dicendo a bundler di assicurarsi che vengano caricate solo le gemme e le rispettive versioni specificate da Gemfile.lock. Ciò funzionerà solo se sei in una directory che contiene uno Gemfile.lock o la cui directory padre/nonno ne contiene uno.

+2

"lo stesso del primo sulla maggior parte dei sistemi" - Ne dubito fortemente (che molti sistemi hanno questo alias). Invece, il "rake" nudo invocherà quello dalla lista gemma globale, non dal pacchetto di questa app. –

+1

in realtà c'è del vero in questa risposta. Rvm effettivamente fonde il percorso in modo che 'rake ...' esegua i binari del tuo progetto.In effetti c'è un plugin per rbenv che ti permette di fare lo stesso. 'which' punta su RVM/rbenv che a sua volta punta a bin sebbene le raccomandazioni recenti suggeriscano di indicare bundler a .bundle/bin come rails ha i propri script. – PhilT

0

bin/rake è un tipo di stub per il comando rastrello da Gemme in bundle. Ha esattamente la stessa funzione di bundle exec rake. Vedere http://bundler.io/v1.14/man/bundle-install.1.html e cercare binstubs per ulteriori informazioni sullo stub. E anche notare che bin/rake e bin/rails sono stub generati da Rails, che sono diversi nel codice dagli stub generati da bundler. Tuttavia, tutti hanno lo stesso scopo e hanno la stessa funzione.

1

bundle exec esegue un comando nel contesto dell'applicazione. Dato che ciascuna applicazione può avere diverse versioni di gemma utilizzata. L'utilizzo di bundle exec garantisce l'utilizzo delle versioni corrette.

Io uso bundle exec sempre anziché rake perché ho più applicazioni in esecuzione sul mio sistema.

Prova ad utilizzare bundle exec rake db:migrate sempre.

Si può imparare di più qui Official documentation

Problemi correlati