2013-08-15 10 views
9

Ich habe zwei Edelsteine ​​"CoreGem" und "AddonGem". Addon Gem fügt zusätzliche Funktionalität hinzu, die den Kern des Edelsteins überschreibt.Wie man die Reihenfolge ändert, in der Edelsteine ​​von innerhalb eines der Edelsteine ​​geladen werden

Wie stelle ich sicher, dass beim Hinzufügen des zweiten Edelsteins die Ansichten und Assets des ersten überschrieben werden.

Bisher funktioniert es, wenn an der Haupt App hinzufügen:

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

Aber ich würde dies tun wollen innerhalb der AddonGem.

Dank

+1

Ich habe noch nie von einer Möglichkeit gehört, das Laden von Dateien neu zu ordnen. Aber wer weiß ... – phoet

+1

nur an etwas gedacht, weiß jemand, wenn CoreGem eine Abhängigkeit von AddonGem wird die Reihenfolge ändern? – montrealmike

Antwort

1

Wo railties_order verwendet wird

railties_order verwendet wird, hier:

die Bestellung von initializer Blöcke zu bestimmen, zu laufen,

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

gefunden in anderen Edelsteinen.

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

So railties_order innerhalb eines initializer Block Einstellung wäre ziemlich sinnlos, wie sie in der Zeit der initializer Block genannt wurde, wurde railties_order bereits festgelegt und in durch den Rest der Anwendung verwendet.

Was Sie stattdessen

Offenbar ein paar mehr initializer Blöcke sind in der Rails::Application::Bootstrap tun könnte. Diejenigen

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

vorangestellt, bevor die initializer Blöcke Hauptanwendung:

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

Also vielleicht kann man Affen-Patch das Bootstrap-Modul mit einigen initializers? Ich schätze, das ist dein Ruf.

+0

Mmmm .. schwarze Magie: P –

-1

Machen Sie einen Generator in AddonGem, dass dieser Code

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

in der Hauptanwendung, wie ein addongem:install Befehl einspritzt.

Nur für die Fertigstellung, obwohl es ein einfacher Ausweg ist. Es sollte möglich sein, das Addon nach dem Core irgendwo anzuhängen.

+0

Dies ist keine gute Alternative, da es die App oder andere Edelsteine ​​brechen könnte (die das gleiche Problem haben). Ich möchte wirklich nur die Reihenfolge meiner Edelsteine ​​ändern – montrealmike

+0

wahrscheinlich nicht: P –

Verwandte Themen