【问题标题】:How to replace a Ruby gem with code from a local source directory如何用本地源目录中的代码替换 Ruby gem
【发布时间】:2016-07-01 01:17:35
【问题描述】:

我一直在使用作为 gem 安装的 Ruby 包。现在我想修改代码,尝试修复错误/添加功能。我可以从 GitHub 下载包的源代码,但是我不确定下一步该做什么。

有没有一种简单的方法可以用本地源目录中的代码替换特定的 gem?理想情况下,这个过程应该足够简单,以至于我可以在修改代码时不断更新。

此外,此包用作其他 gem 的依赖项,理想情况下,使用此 gem 的其他包将使用更新版本。 (因为我最终运行的程序来自其他 gem。)有没有办法在不从源代码安装其他包的情况下进行安装?

(如果它使事情变得更容易,这将在 Linux 上。)

【问题讨论】:

    标签: ruby installation rubygems


    【解决方案1】:

    假设您使用bundler,您可以在您的Gemfile 中进行设置。如果您不确定使用捆绑器,请查看项目的根目录。应该有一个名为Gemfile 的文件,没有扩展名。此文件的存在通常表明该项目的作者正在使用 bundler。下面描述的所有更改都应在该文件中进行。

    gem hashmap 中的:path:git 键可用于将rubygem 指向不同的位置。当我使用:path 时,我将拥有两个不同的 ruby​​ 项目。第一个项目是活动项目。我目前正在进行的项目。该项目需要我需要更新的相关 gem。第二个项目将检出我希望更改的 gem 的源代码。通过这两个项目设置,我可以编辑第一个项目的 Gemfile 并将其指向第二个项目。这是使用:path 完成的。

    # The Gemfile of the first project
    gem 'the_gem_in_question', :path => '/the/path/to/the/second/project'
    

    【讨论】:

    • 如果您在 Gemfile 中包含 Gem 的版本,那么在 Gemfile 和 Gem 中碰撞版本会导致 Bundler 安装新版本。
    • 如何判断我是否在使用捆绑程序? -- 我对宝石几乎没有经验。我安装的 gem 是使用“gem install”自动下载的,所以我对设置 gem 一无所知。 (例如,当您说“在 Gemfile 中设置”时,这是在下载的源目录中还是在其他地方?)
    • @R.M 我已经为您更新了答案以包含更多详细信息。如果您希望我扩展其他任何内容,请告诉我。
    • 我仍然不清楚您将如何告诉系统您正在使用源目录中的代码。我编辑 Gemfile ... 然后呢?是否需要运行一些“安装”命令才能让其他软件包使用新版本?而且一旦“安装”了,每次修改源代码时都需要做些什么吗?
    • 另外,从我读到的关于捆绑器和 Gemfiles 的内容来看,它看起来像一个依赖管理系统。你是在暗示自我依赖吗?也就是说,您是否建议我将gem 'foo', :path => '/home/me/foo' 行放在文件/home/me/foo/Gemfile 中?
    【解决方案2】:

    有两种方法可以修改这些文件并显示更改。

    一个是使用 Gemfile 来定义路径。例如,如果你想在本地使用 redis gem,你可以git clone git@github.com:redis/redis-rb.git 然后正如 Stewart 上面指出的那样,将它放入你的 Gemfile 中这一行 gem 'redis', :path => './pathtoredis/redis' 而不是 gem 'redis'

    另一种更快但更难跟踪更改和内容的方法是只需 gem open redis 在文本编辑器中打开它。

    【讨论】:

    • 当我尝试gem open 时,我得到一个“未知命令打开”- 是否有我需要的最低版本的 gem,或者需要安装一些额外的包?
    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多