【问题标题】:How can I monkey-patch a class inside a module?如何对模块内的类进行猴子补丁?
【发布时间】:2016-08-25 23:19:46
【问题描述】:

我正在使用 Xeroizer gem 并想对其中一个 pull requests 进行修补,以添加我需要的功能。

该请求有四个提交,其中一些涉及修补模块内的类。是否可以在不必分叉 gem 并永远维护它的情况下执行此操作(或直到合并此拉取请求为止)?

我发现 this stackoverflow 问题很相似,但并不完全涵盖相同的场景,还有 this 帖子处理修补模块,但到目前为止我的尝试最终要么破坏了 gem,要么只是不工作。

【问题讨论】:

  • 我的回答有帮助吗?
  • 我找到了一个不涉及猴子补丁的替代解决方案,因此我从未尝试过您的建议,因为基本问题不再相关。您的答案是我最初考虑的,但由于 API 得到相当频繁的更新,我需要一个不会从基础 gem 中排除未来补丁的解决方案。
  • 您介意发布您的解决方案来帮助社区
  • 我的解决方案重新设计了相关模块的体系结构,该模块正在使用需要进行猴子补丁的 gem,并且无论如何都不能回答我的问题,所以我不能发布它来帮助其他人.

标签: git github ruby-on-rails-3.2 monkeypatching ruby-1.9.3


【解决方案1】:

好的,这就是你可以做的

  1. 使用命令git clone https://github.com/waynerobinson/xeroizer.git 克隆系统上某处的 repo(为了便于举例,我们说 ~/Xeroizer)
  2. 然后在这种情况下导航到 repo ~/Xeroizer
  3. 使用命令git checkout add-balances-to-contact 切换到相关分支
  4. 然后导航到您的 Rails 项目
  5. 在你的编辑器中打开你的 gem 文件
  6. 在您的 gem 文件中找到包含 Xeroizer gem 的行后,它应该类似于 gem 'xeroizer'
  7. gem "xeroizer", :path => "~/Xeroizer"替换你的gem文件中的那一行
  8. 然后保存您的 gem 文件并关闭您的编辑器
  9. 然后运行捆绑包

这应该会为您提供所需的 gem 版本。或者,您可以在第 7 步中使用此命令从上述列表中换出 gem 文件命令

gem "xeroizer", :git => "git@github.com:waynerobinson/xeroizer.git", :branch => "add-balances-to-contact"

把它放到你的 gem 文件中然后运行 ​​bundle

至于您关于必须永远维护它的问题,目前的答案是否定的,因为这个分支是在几周前合并的,否则必须在某种程度上维护它。


【讨论】:

  • 您可以使用 git 的子模块功能来获取您的更改,否则您可以将树分开并使用魔法脚本为您做补丁。这增加了进行一些额外检查的机会(所有这些文件都存在吗?...)。
猜你喜欢
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2013-12-28
相关资源
最近更新 更多