在我的服务器(或笔记本电脑)上,每当我使用以下命令安装gem时:
gem install mygemname
或者在我的gemfile中:
gem 'mygemname'
它将安装到我电脑上的某个文件夹中。
如果我想添加一些日志记录等,我可以转到该文件夹并编辑文件吗?
如果这是不可能的,我记得我读到过,你可以将gem源代码安装在你的Rails3应用程序中的“供应商”文件夹下。我如何在本地安装它,这样我就可以编辑它并向它添加日志(了解它是如何工作的,等等)。
发布于 2012-01-01 06:46:42
你能?
是
你应该这样吗?
绝对不是。
为什么?
解决方案
有几种方法可以解决这个问题:
提交补丁
如果你觉得这个“改变”将使整个社区受益,找到源代码(最有可能在github上),分支,应用补丁,编写测试,并提交一个拉取请求。如果开发人员同意你的补丁是可行的,它将被合并到项目中,并与下一个版本的gem一起发布。
优势
Disadvantages
重塑宝石
如果您认为这不会使整个社区受益,但您仍然希望允许其他开发人员以系统的方式使用gem,派生现有gem,应用您的补丁,重命名gem并发布。在这种情况下,最好使用原始gem名称作为自定义gem的前缀。例如,如果gem的名称为foo
,则应将gem命名为foo-my-company
。现在,您可以选择开源gem (推送到rubygems)或将其推送到组织内的私有开发gem服务器。你仍然必须在你的re- gem中找到原始gem作者!
优势
Disadvantages
难以从原始gem进行更新的
可能很麻烦
本地库(猴子补丁)
您可以在您的应用程序中创建一个猴子补丁,并覆盖任何不适合您当前环境的方法或属性。
优势
Disadvantages
difficult
Fork和Source
这是我推荐的选项。为什么我把它放在最后--其他的更常见。在这种方法中,您从原始存储库(可能在github上)派生gem,然后从git存储库获取gem。例如,假设gem名为foo
,您可以在github上将foo
派生为username/foo
。应用你的补丁,改变,任何东西。然后在你的Gemfile中:
gem 'gem_name', :git => 'git://github.com/username/foo'
这将在每次运行命令时从代码库的源代码安装和编译gem。您还可以指定特定的标签和分支(建议用于稳定性)。
优势
对于上游的分支,您可以轻松地进行更新(您可以从上游进行分叉,合并,您可以轻松地对所有changes)
Disadvantages
结论
每种方法都有自己的优点和缺点(我已经尽可能地列举出来)。在任何情况下,您建议的方法是,而不是解决该问题的推荐方法。
如果读者对其他优点/缺点有意见,请列出它们,我会将它们添加到我的答案中。
发布于 2012-01-01 00:55:38
当然,这只是代码。
你应该这样吗?通常不会,因为它可以重新安装、更新等。
因为你可以重新打开类,所以更安全的方式是修补、拥抱和扩展等等。当然,这并不总是像直接修改一样实用。
出于教育目的(如果修改丢失并不重要),它很好,而且比重复所有内容更有意义。不过,AOP-ish日志记录通常在不修改原始源的情况下是可行的。有时克隆存储库并使用它,特别是在探索阶段,会更干净。
发布于 2012-01-01 00:57:32
戴夫·牛顿的建议是明智的,你应该采纳它,但看看它来学点什么也没什么错。运行gem env
将向您显示gem的安装位置;您可以在lib
目录中找到代码的主要部分。
https://stackoverflow.com/questions/8689306
复制相似问题