【问题标题】:How to refer a local gem in ruby?如何在红宝石中引用本地宝石?
【发布时间】:2011-06-22 18:37:52
【问题描述】:

我将一些 ruby​​ 代码打包到 gem 中。我想在其他代码中引用 gem 中的代码。 因此,在 Gemfile 中,我指定了 gem 的名称、版本和本地路径。喜欢:

gem 'gemname','0.x', :path => 'RELATIVE_PATH_TO_GEM_FILE'

捆绑安装后,我看到了

Using gemname (0.x) from source at RELATIVE_PATH_TO_GEM_FILE

但是当我运行代码时,它在 gem 中找不到代码。 LOAD_PATH 显示 ABSOLUTE_PATH_TO_GEM_FILE/lib。

难怪找不到代码,ABSOLUTE_PATH_TO_GEM_FILE 下只有 gem 文件。它没有打开包装。所以没有lib目录。

如果我将 gem 文件安装到我的系统中,那么一切正常。我可以看到 gem 文件被解压缩到源代码文件中。 但我的问题是它是否可以以某种方式直接引用本地 gem 文件?

【问题讨论】:

  • 通常,术语“本地 gem”是指您在本地编译和安装的,而不是从其他网站下载的。您是否考虑过在本地编译和安装 gem,而不是做您正在做的事情?
  • 其实.gem文件是我自己创建的。我只是在那个 .gem 文件中打包了一些 ruby​​ 代码,试图使它们易于与其他代码共享。 .gem 文件中有 lib 目录。我在想它会像 java 的 jar 一样。我想 ruby​​ 可以查看该包文件,而不是将它们全部从包中提取出来。令人困惑的是,bundler 实际上是在包中找到源代码。但是 load_path 似乎不支持包中的目录。
  • 顺便说一句,虽然 bundler 在我的特定路径下找到了 .gem 文件,但它不会将 .gem 缓存在 vendor/cache 中,除非 .gem 文件已安装到系统 gemset .

标签: ruby gem load-path


【解决方案1】:

不,您不能直接引用.gem 文件。

在您的术语中,您需要使用“未打包”的 gem。

:path => '/foo/bar/'

其中/foo/bar/ 是带有lib/ 等的(gem)目录。

【讨论】:

    【解决方案2】:

    我们创建了一个本地(不是系统范围的)gems 位置。我们设置了这些环境变量:

    GEM_HOME=/path/to/rubygems-1.3.4
    RUBYLIB=/path/to/rubygems-1.3.4/lib/
    

    通过设置这些,我们可以执行 'gem install ...' 将构建的 gem 放入该目录,并且 ruby​​ 知道在哪里可以找到它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多