gpt4 book ai didi

ruby-on-rails - 我可以编辑使用 'gem install'或从我的gemfile安装的gem吗?

转载 作者:数据小太阳 更新时间:2023-10-29 06:33:37 26 4
gpt4 key购买 nike

每当我使用以下命令安装gem时,在服务器(或笔记本电脑)上:

gem install mygemname

或在我的gemfile中:
gem 'mygemname'

它将在计算机上安装到我计算机上的某个文件夹中。

如果我想说添加一些日志记录等,可以转到该文件夹​​并编辑文件吗?

如果无法做到这一点,我记得读过您可以在rails 3应用程序的“vendor”文件夹下安装gem源代码。如何在本地安装它,以便可以对其进行编辑和添加日志记录(以了解其工作原理等)

最佳答案

你能?



你应该?

绝对不。

为什么?

  • 修改gem来源使其很难升级到gem
  • 的较新版本
  • 调试问题
  • 困难得多
  • 它将导致巨大的麻烦
  • 这使得在协作环境中工作变得困难(每个开发人员都有正确的被黑 gem 吗?)
  • 会引起类似这样的问题(即我应该在哪里砍 gem ?)

  • 解决方案

    有几种方法可以解决此问题:

    提交补丁

    如果您认为此“更改”将使整个社区受益,请找到源代码(最有可能在 github上),进行派生,应用补丁,编写测试并提交请求请求。如果开发人员同意您的补丁程序可行,那么它将被合并到项目中并与下一版gem一起发布。

    的优点
  • 您正在帮助社区
  • 您的开发机器
  • 上有gem的本地副本(因为您已将其 fork )

    的缺点
  • 您必须等待开发人员接受您的补丁
  • 这可能是非常耗时的


  • 重新 gem

    如果您不认为这是整个社区都会从中受益的,但是您仍然希望允许其他开发人员以系统的方式使用gem,派生现有的gem,应用您的补丁,重命名gem并发布。在这种情况下,优良作法是在您的自定义gem之前加上原始的gem名称。例如,如果该 gem 名为 foo,则可以将其命名为 foo-my-company。现在,您可以选择开源该gem(推送至rubygems)或将其推送到组织内的私有(private)开发gem服务器。 您仍然必须在重新 gem 中寻找原始 gem 作者!

    的优点
  • 不必等待开发人员
  • 中央代码库
  • 轻松共享

  • 的缺点
  • 难以从原始gem
  • 更新
  • 维护
  • 可能很麻烦


    本地库(猴子补丁)

    您可以在应用程序内部创建一个猴子补丁,并覆盖任何不适合您当前环境的方法或属性。

    的优点
  • 快速简便
  • 轻松共享(通过git-仅在您的回购中包含补丁文件)

  • 的缺点
  • 更新 gem 很困难
  • 对其他开发人员来说,您是否正在修改Gem的核心
  • 尚不清楚
  • 难以调试(gem或您的补丁程序有错误吗?)


  • 货叉和货源

    这是我推荐的选项。为什么我把它放在最后-其他的比较普遍。在这种方法中,您从原始存储库(可能在github上)中存储了gem,然后从git repo中获取了gem。例如,假设该 gem 名为 foo,则可以将 foo叉到github上的 username/foo上。应用补丁,更改等。然后在您的Gemfile中:
    gem 'gem_name', :git => 'git://github.com/username/foo'

    每次运行bundle命令时,它将从仓库 处从源代码安装并编译gem。您还可以指定特定的标记和分支(建议使用稳定性)。

    的优点
  • 您可以轻松地更新上游(您有一个分支-从上游拉出,合并,您有所有更改)
  • 版本控制很容易(对各种版本使用标签和分支)
  • 每个人都可以访问相同的gem来源
  • 易于管理的更新

  • 的缺点
  • 您的“自定义”代码是公共(public)的(尽管您可以使用自定义git服务器而不是github来解决此问题)

  • 结论

    每种方法都有其自身的优点和缺点(我尝试尽力列举了一下)。无论如何,您建议的方法是而不是一种解决该问题的建议方法。

    如果读者对其他优点/缺点有意见,请列出它们,然后将它们添加到我的答案中。

    关于ruby-on-rails - 我可以编辑使用 'gem install'或从我的gemfile安装的gem吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689306/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com