【问题标题】:Require a modified gem source code需要修改过的gem源代码
【发布时间】:2013-07-20 23:55:06
【问题描述】:

我正在尝试require 一个我已下载并修改的 gem 源代码。 require 适用于主文件,但主文件 require 其他文件(类和模块)不幸的是,这些类和模块是从先前安装的 gem(通过 gem 命令)加载的,而不是本地修改的那些。

我正在做一个require './lib/foo',有什么想法告诉要求只加载本地文件吗?

已编辑:我的 require './lib/foo' 正在工作。 foo 是我想要的本地版本。但是 foo 有其他要求,而这些要求指向已安装 gem 的文件(我不想要它,因为我正在尝试更正里面的东西)。

【问题讨论】:

  • 您的修改是否通用并与当前 gem 的质量相匹配?如果是这样,除了可以立即使用的任何答案之外,您还可以在 github 上提出拉取请求,然后在发布更改时照常使用 gem。
  • 是的,这是计划。我只是希望能够在推送我的更改之前在 IRB 或测试脚本上测试 gem。

标签: ruby gem require


【解决方案1】:

最好的方法是将Gemfile 添加到您的项目中,并在您要自定义的gem 上设置source

【讨论】:

  • 我明白了,你能说得更清楚一点吗?我实际上在 gem 代码中。
  • 在您的 Gemfile 中,包含以下行:gem 'foo', :path => '/home/myDir/foo'
【解决方案2】:

在 Ruby 2.0 下,您可以使用__dir__。所以:

require "#{__dir__}/lib/foo"

将需要您的本地 foo.rb 文件,而不是您在其他目录中的 foo.rb

另外,最好不要使用与原始 gem 相同的名称。您应该将文件名更改为其他名称。

【讨论】:

  • 实际上,我的 require './lib/foo' 正在工作。另一个问题来自需要其他文件的 foo。
  • 这很奇怪。 require 应该不能扩展文件名,除非你有一些奇怪的库在工作。
  • 什么意思?我有:lib/foo.rb 其中包含 'require foo/module1',但是它不会加载本地版本,而是安装的 foo/module1 的 gem 版本。
【解决方案3】:

通过命令从系统中卸载原始 gem

  gem uninstall some_gem

然后转到下载源代码的根目录,并使用命令从修改后的源代码构建自己的 gem

  gem build some_gem.gemspec

通过指定生成的源文件名来安装 gem。

  gem install some_gem-version 

【讨论】:

    【解决方案4】:

    如果您使用的是 Bundler,并且您已经在 github 或其他在线 git 提供商上分叉了这个 gem,您可以使用 :git 命令 (http://bundler.io/v1.3/git.html) 修改您的 Gemfile:

    代替

    gem some_gem

    你可以的

    gem some_gem, :git => 'git://github.com/my_username/my_awesome_fork_of_some_gem.git'

    甚至

    gem some_gem, :github => 'my_username/my_awesome_fork_of_some_gem'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 2015-08-01
      相关资源
      最近更新 更多