【问题标题】:Whats the best way to tweak ruby gems for code reading调整 ruby​​ gem 以进行代码阅读的最佳方法是什么
【发布时间】:2012-03-06 14:29:20
【问题描述】:

为了帮助理解各种 gem 的源代码,我经常想在源代码中放置各种 puts 语句,甚至尝试使用 ruby​​ 调试器。

但是最好的方法是什么?

您是否从 github 克隆项目并在本地进行更改,如果是,您如何“强制”使用本地克隆代码而不是机器上的本地 gem。我是否只是创建一些明确需要克隆的 repos 文件夹路径的脚本?

或者我应该使用rvm创建一个临时gemset,下载gem并直接修改它吗?

还有没有被忽略的其他方法?对于为在 Rails 项目中使用而设计的 gem,这将如何改变。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    当我想对 Gem 进行更改时,我通常这样做的方式:

    1. 在 Github 上分叉存储库
    2. 检查并为本地更改创建一个新分支
    3. 使用 Bundler 管理使用 Gem 的项目的依赖项
    4. 更改 Gemfile 中的一行,使其使用 Gem 的分叉版本:

    gem "thegem", :git => "git://github.com/name/thegem.git", :branch => 'mybranch'
    

    gem "thegem", :git => "file:///path/to/thegem", :branch => 'mybranch'
    

    /path/to/thegem 是本地工作副本的路径。

    优点是您现在已经拥有一个完美的基础架构,可以通过拉取请求贡献您的更改:)

    【讨论】:

    • 正如另一个答案中所建议的那样,在这种情况下使用:path 更加方便 - 您在本地对源代码所做的每一次更改都会自动反映在正在运行的代码中。
    • @AleksanderPohl:正如这个答案中所建议的,我不太同意。我喜欢在此处进行版本控制并看到更改是在主题分支上完成的优势,之后可以将其丢弃(或作为一个整体合并到其他分支中)。当然在开发的时候,不需要一直推送到 Github,直接使用:git => "file:///path/to/thegem"即可。这不像git commit -m 是一个昂贵的操作或不能绑定到一个shell 别名。
    • 另外,这两种方法并不相互排斥,您还可以使用:path 进行开发,使用:git 进行部署的应用程序。
    • 实际上有两个命令必须发出git commitbundle update。第二个不如第一个便宜(即使使用 --local 选项),因为 Bundler 必须计算依赖关系。而且,即使它只是一个命令,在作者描述的场景中,我更喜欢:path - 这些只是调试消息,所以恕我直言,将这些更改提交到存储库是没有意义的。但我同意,当您的更改应该在您的机器之外可见时,首选第二个版本。
    • @AleksanderPohl:嗯,我没想到bundle update,没错。我仍然会在这里留下这个答案,我认为这是普遍的兴趣。然后 OP 可以在此处提供的两个选项之间进行选择 :)
    【解决方案2】:

    Bundler

    在 Rails 应用中,只需编辑 Gemfile 并添加:

      gem "gem_name", :path => "~/MyGems/gem_name"
    

    PS:Bundler 适用于任何 Ruby 项目。

    【讨论】:

      【解决方案3】:

      您可以使用 rvm 创建一个临时 gemset,下载 gem 并直接对其进行修改。查看/修改 gem 的快速方法是使用 gemedit

      安装:

      • gem 安装 gemedit

      用法:

      • gem 编辑器
      • 或:gem edit devise -e mate

      【讨论】:

        猜你喜欢
        • 2011-06-12
        • 2010-09-13
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        相关资源
        最近更新 更多