pluginのような機能単位よりも、よりアプリケーションよりのものが作りたいときに便利な Rails Engines plugin 。
これを利用した際に便利な機能の一つに routes をplugin側のroutesで上書きしてくれる、from_pluginというものがあります。
( 実装をみてみるとシンプルで、ほんとに上書きしちゃってますw)
この機能を使った上で
rake gems
とかやるとうまくいかない。
正確にはきちんと指定したgemがはいっていれば正常に動くのですが、はいってないgemが一つでもあると動かない。
rake gemsをやるたびにコメントアウトは面倒すぎるのでいろいろ調べてみた。
rails中身のソースをおった感じだと、最初の上書きは当然成功している、でも例外が発生した際はなんか奥の方の都合できちんとrails内部の方のクラスがつかわれてしまうため、うまくいかない。なので from_pluginをやる前に無理矢理Engineを起動して上書きを強制すると正常に動く。ただしこれだと通常のrailsの起動がうまくいかない。
ふーむ。
なんかメソッドをhockして解決とかしたかったんだけど、逆にややこしくなりしうだったので以下の方法で解決。
map.from_plugin :plugin_name if ENV['FROM_PLUGIN_SKIP].nil?
として
FROM_PLUGIN_SKIP = true rake gems
とするように。
なんか無理矢理間はいなめないが、仕方ない。