我正在使用一些框架(blacklight),我需要根据自己的需要进行更改和扩展。也就是说,我需要重新实现一些功能,视图和控制器。我目前所做的是将文件复制到我的工作目录中的匹配路径,并在复制的文件中进行更改。这样,我复制的文件会覆盖gem中的原始文件。当发布新版本的gem时,我可能需要相应地更改我复制的文件。我不喜欢我解决修改宝石问题的方式。有没有更好的方法呢?
答案 0 :(得分:3)
我根据具体情况了解三种方式。
最简单的是在正确的地方覆盖。例如,您可以在ApplicationController中覆盖Devise的current_user
。一些方法适用于模型,助手。只是在正确的地方做到这一点。
第二个是猴子补丁。如果没有好的地方可以覆盖而且没有太多要改变的东西,你可以在应用程序中修补gem的特定方法。通常的做法是将这样的猴子修补程序放在/lib
中,完全按照gem的模块名称和挂钩的位置。
第三个是在github上创建自己的gem分支。分叉宝石,在本地克隆它,改变你需要的东西,推。如果gem维护者可以接受你的改变,那就太好了。如果没有,您可以通过在Gemfile中设置它来使用您自己的gem版本
gem 'some_geg', :git => 'git://github.com/my_repos/some_gem.git'
当main中有更新时,您可以将其合并到您自己的版本中。