【问题标题】:How to install, require, and use a gem in ruby如何在 ruby​​ 中安装、要求和使用 gem
【发布时间】:2012-05-02 16:09:51
【问题描述】:

我正在尝试在我的 ruby​​ 脚本中使用 rake...(Ruby 1.8.6, JRuby 1.6.5)

使用 gem install --remote rake 下载的 rake,安装时看起来没问题...

Fetching: rake-0.9.2.2.gem (100%)
Successfully installed rake-0.9.2.2
1 gem installed

我有一个简单的 ruby​​ 脚本,它工作正常,但是当我导入 rake 以使用以下任何 requires 时,它开始抱怨......

require 'rake'
LoadError: no such file to load -- rake
  or
require '/lib/rake'
LoadError: no such file to load -- lib/rake

经过一番搜索,我发现在rake之前添加require 'rubygems'可以解决问题....

require 'rubygems'
require 'rake'

尽管它有效,但我有一些问题......

  1. rake 上的 gem 规范将 require_path 显示为 lib,所以为什么 require '/lib/rake' 不工作吗?我是不是误解了require_path的意义?

  2. 为什么一定要把require 'rubygems'放在require 'rake'前面

【问题讨论】:

    标签: ruby gem jruby


    【解决方案1】:

    是的,你误解了它的重要性。规范中的require_paths 是一个该gem 安装目录的子目录 的数组,应该搜索属于该gem 的文件。

    要找出 rake 的真正位置,试试这个:

     $ gem which rake
    

    您会看到它实际上安装在与/lib 完全无关的地方;在我的系统上,它位于/var/lib/gems 下。一般来说,Ruby gems 存在于它们自己的目录结构中;标准 Ruby 包含路径 ($:) 中的唯一文件是 rubygems 本身,您过去必须显式地 require 才能使任何实际的 gem 可见。 (从 Ruby 1.9 开始,就没有必要了。)

    Gems 不仅仅是要加载的库;您可以安装同一个 gem 的多个版本,并一次指定您想要的版本,并执行其他如果 gem 被转储到标准 Ruby 包含路径中将无法工作的事情。

    【讨论】:

      【解决方案2】:
      1. gemspec 中的require_path 告诉ruby 这个gem 的文件在gem 中的位置。它使您能够输入require 'rake',然后ruby 知道它需要在gem 安装文件夹中查找/lib/rake
      2. 在 Ruby 1.8 中,rubygems(负责为您的应用程序提供 gem 的机制)默认不加载,并且默认的 ruby​​ 不知道您系统上的任何 gem。您需要先加载 ruby​​gems,然后才能使用任何其他 gem。 Ruby 1.9 不再是这种情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-10
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多