Gem override 某个 gem 的 controller 方法

cestivan · 2013年09月12日 · 最后由 huobazi 回复于 2013年09月13日 · 3304 次阅读

我的 Rails 程序使用了miliagem,不过这个 gem 有段时间没有更新了,一些依赖的 gem 更新后导致它没有办法正常工作。 我在本地环境修改 gem 代码测试通过了,确认了问题。问题很小,所以我觉得还是 commit 给作者,然后等更新会好一点。 等更新的过程,想用其他方法先解决,方案是在程序的其他地方打开这个 gem 的类,然后修改指定的方法。代码量很小。

想咨询下有没有同类经验的人,我是写在application_controller.rb结尾还是另外新建一个 model 放在lib里再引用好一点?

应该 pull request

#1 楼 @Rei 嗯,对的,我已经提交了,不过在那之前想暂时用其他方法先运行起来

一般我 fork 了之后就先用着自己的 repo。

#3 楼 @Rei 做个本地 gem?我刚刚直接新建了个 controller 把 gem 的类给 override 了,所幸能用~ Thanks

@cestivan 我遇到这种情况,就会把 gem 的代码全部拿过来,自己改,临时放在 lib 目录下引用,而不是放在 gemfile 里面,等 gem 的作者改好后,我再把这个 gem 包加进来...

如果 git 源是有效的 gem 目录结构,可以直接写在 Gemfile 里面

http://bundler.io/v1.3/git.html

Fork, 修改,把那个 Gem 在 Gemfile 里面用 github 地址:

Gemfile

gem 'xxx', github: 'aaa/xxx'

#7 楼 @huacnlee Great, no need to create any thing new.

#5 楼 @neverlandxy_naix : @Rei 's solution better. (waiting for ubuntu installation, no chinese input...)

本地路径也可以在 gemfile 内使用

需要 登录 后方可回复, 如果你还没有账号请 注册新账号