2013-08-15 8 views
9

Ho due gemme "CoreGem" e "AddonGem". Addon Gem aggiunge funzionalità aggiuntive che sovrascriveranno la gemma principale.Come modificare l'ordine con cui le gemme vengono caricate da una delle gemme

Come faccio a essere sicuro che se viene aggiunta la seconda gemma, sovrascriverà le viste e le risorse della prima.

Finora funziona quando si aggiunge alla applicazione principale:

config.railties_order = [ :main_app, AddonGem::Engine, :all] 

Ma avrei voluto fare questo dall'interno del AddonGem.

Grazie

+1

Non ho mai sentito di un modo per riordinare il caricamento dei file. Ma chi lo sa ... – phoet

+1

ha appena pensato a qualcosa, qualcuno sa se facendo diventare CoreGem una dipendenza di AddonGem cambierà l'ordine? – montrealmike

risposta

1

Dove railties_order viene utilizzato

railties_order è qui utilizzato:

per determinare l'ordine di initializer blocchi per eseguire,

https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L337

trovato in altre gemme.

https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L47

Quindi impostando railties_order all'interno di un blocco di initializer sarebbe piuttosto inutile, in quanto per il momento il blocco initializer è stato chiamato, railties_order era già impostato ed è in utilizzato dal resto dell'applicazione.

Che cosa si potrebbe fare, invece

Apparentemente un mazzo più initializer blocchi sono all'interno del Rails::Application::Bootstrap.

https://github.com/rails/rails/blob/master/railties/lib/rails/application/bootstrap.rb

Quelli sono preceduti prima di blocco di inizializzazione dell'applicazione principale:

https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L262

Così forse si può scimmia-patchare il modulo di bootstrap con alcuni inizializzatori? Immagino che sia la tua chiamata.

+0

Mmmm .. black magic: P –

-1

Fai un generatore in AddonGem che inietta questo codice

config.railties_order = [ :main_app, AddonGem::Engine, :all] 

nel l'applicazione principale, come un comando addongem:install.

Solo per completamento, anche se è una via d'uscita facile. Dovrebbe essere possibile agganciare l'addon dopo il core da qualche parte.

+0

questa non è una buona alternativa in quanto potrebbe rompere quell'app o altre gemme (che hanno lo stesso problema). Mi piacerebbe davvero cambiare solo l'ordine delle mie gemme – montrealmike

+0

probabilmente no: P –

Problemi correlati