1

我正在使用一些框架(blacklight),我需要根据自己的需要进行更改和扩展。即,我需要重新实现一些功能、视图和控制器。我目前所做的是将文件复制到我的工作目录中的匹配路径,并在复制的文件中进行更改。这样,我复制的文件将覆盖 gem 中的原始文件。当新版本的 gem 发布时,我可能必须相应地更改我复制的文件。我不喜欢我解决修改宝石问题的方式。有更好的方法吗?

4

1 回答 1

3

我知道三种方式,视具体情况而定。

最简单的方法是在正确的位置覆盖。例如,您可以覆盖current_userApplicationController 中的 Devise。一些方法适用于模型、助手。只要在正确的地方做。

第二个是猴子补丁。如果没有好地方可以覆盖并且没有太多需要更改的东西,您可以在您的应用程序中修改 gem 的特定方法。一般的做法是将这样的猴子补丁放入/lib,完全按照 gem 的模块名称和挂钩的地方。

第三个是在github上制作自己的gem fork。分叉 gem,在本地克隆它,更改您需要的任何内容,推送。如果 gem 维护者可以接受您的更改,那就太好了。如果没有,您可以通过在 Gemfile 中设置来使用自己的 gem 版本

 gem 'some_geg', :git => 'git://github.com/my_repos/some_gem.git'

当 main 中有更新时,您可以将其合并到您自己的版本中。

于 2013-08-27T08:45:12.637 回答