【发布时间】:2012-02-02 22:05:08
【问题描述】:
好的,我正在开发一个 rails gem,我希望它覆盖 sprockets 中的特定方法。
我要覆盖的方法是:Sprockets::Base.digest,这样我就可以在编译应用程序资产时基于我的 gem 版本的指纹。
我该怎么做呢?
在我的 gem 中,我创建了一个文件 lib/sprockets/base.rb 并放置以下代码:
类 Sprockets::Base 定义摘要 @digest = digest_class.new.update(MyGem::VERSION) @digest.dup 结尾 结尾当我运行bundle exec rake assets:precompile 时,我得到:
undefined method 'logger=' for #<Sprockets::Environment:0x1315b040>
所以在我看来,整个类几乎都被某种方式覆盖了(这失去了那个,以及其他方法),而不是仅仅覆盖了一个方法。
如果我将代码的 sn-p 直接包含到使用这两个 gem 的应用程序的 rakefile 中,那么一切都会完美。
【问题讨论】:
-
这是环境和索引的基类,所以您可能需要重新初始化它们? github.com/sstephenson/sprockets/blob/…
标签: ruby-on-rails ruby ruby-on-rails-3 gem overriding