相关疑难解决方法(0)

从另一个gem覆盖gem内部的方法

好吧,我有一个我正在研究的rails gem,我希望它覆盖sprockets中的特定方法.

我想覆盖的方法是:Sprockets :: Base.digest,以便在编译应用程序的资产时,我可以将指纹从我的gem版本中删除.

我该怎么做呢?

在我的gem中,我创建了一个文件lib/sprockets/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>

因此,在我看来,整个类都会以某种方式被覆盖(这会丢失它,以及其他方法),而不是仅仅覆盖一个方法.

如果我将这段代码直接包含在使用两个宝石的应用程序的rakefile中,那么事情就可以完美地运行.

ruby gem overriding ruby-on-rails ruby-on-rails-3

3
推荐指数
1
解决办法
2982
查看次数

标签 统计

gem ×1

overriding ×1

ruby ×1

ruby-on-rails ×1

ruby-on-rails-3 ×1