2013-05-23 7 views
20

L'ordine in cui elevi le tue gemme è importante? Questi due blocchi sono equivalenti?L'ordine delle gemme nel tuo Gemfile fa la differenza?

gem 'carrierwave' 
gem 'rmagick' 

E

gem 'rmagick' 
gem 'carrierwave' 
+0

Bene, è un po 'troppo lungo per un commento, ma CarrierWave non sta scrivendo correttamente l'URL dell'immagine sul modello. Ho intenzione di cancellare tutto e ricominciare. Se ciò non funziona, verrò con più informazioni. – dee

+0

Stai usando lo spazio di archiviazione 'fog'? La memorizzazione dei file non dovrebbe memorizzare l'url, ma il nome del file. L'url viene generato in base alla configurazione. – PinnyM

+0

Stavo usando 'nebbia'. In effetti, è allora che tutto si è rotto. Ma 'object.image => nil' comunque, quindi non è stato salvato nulla. – dee

risposta

6

Bundler non carica le dipendenze gemma dall'ordine di elencare li *, ma lo fa andare per priorità sorgente usando questo criterio:

  1. Il percorso esplicito o le opzioni git si aggiungono ad una dipendenza gemma, ad esempio:

    gem 'some-gem', github: 'somebody/some-gem' 
    
  2. dipendenze esplicitamente definito per le gemme che sono altrimenti richiesto implicitamente da altre dependecies gemma, vale a dire, gem 'actionmailer' gemma è implicitamente richiesto dal gem 'rails'

  3. Se si dispone di più fonti hanno aggiunto che cercherà dall'ultimo al primo.

Vedi http://gembundler.com/v1.3/man/gemfile.5.html#SOURCE-PRIORITY


* Edit: Come per la risposta di Matt, a seconda di ciò che si sta cercando di fare (o cosa gemme si sta caricando) l'ordine MIGHT importa. Vedi Even with bundler your gem order can be significant.

+0

Stai parlando dell'ordine delle fonti controllate per una gemma, ma credo che la domanda riguardasse se l'ordine delle dichiarazioni gemma in un Gemfile conta - e credo che la risposta sia sì. – odigity

11

Quando si utilizza Bundle.require (quali Rotaie), le gemme sono necessarie nell'ordine in cui appaiono nel file Gem. In non era sempre così, ma has been this way for a while.

Dal momento che Carrierwave richiede RMagick esplicitamente quando è necessario, non penso che dovrebbe essere rilevante nel tuo caso; ma in senso stretto i due blocchi non sono equivalenti.