好吧,我有一個軌道寶石,我正在工作,我希望它覆蓋在鏈輪的特定方法。覆蓋另一個寶石中的寶石方法
我想重寫的方法是:Sprockets::Base.digest,這樣我就可以在編譯應用程序的資產時將指紋從我的寶石版本中刪除。
我該怎麼做呢?
在我的寶石,我創建一個文件的lib /鏈輪/ base.rb,並把下面的代碼:
class Sprockets::Base def digest @digest = digest_class.new.update(MyGem::VERSION) @digest.dup end end
當我運行bundle exec rake assets:precompile
我得到:
undefined method 'logger=' for #<Sprockets::Environment:0x1315b040>
所以幾乎在我看來,整個班級以某種方式被重寫(這會失去它和其他方法),而不僅僅是重寫一種方法。
如果我將這段代碼直接包含到使用這兩個gem的應用程序的rake文件中,那麼這些工作完美無缺。
這是環境和索引的基類,因此您可能需要重新初始化它們? https://github.com/sstephenson/sprockets/blob/477c40915e00e752c473011ffb67842a550ae782/lib/sprockets/index.rb#L22 – 2012-01-05 01:31:58