2

我有一个使用珠宝商创建的小应用程序。珠宝商生成一个 lib/ 目录,我想在其中编写代码。

我正在创建的这个 gem 依赖于 httparty gem,所以,在我的 Rakefile 中我放了

  Jeweler::Tasks.new do |gem|
    gem.add_dependency('httparty', '>= 0.4.5')
    ...
  end

在我的实现文件中我放

require 'httparty'

但是当我执行它时,我得到:

lib/my_app.rb:1:in `require': 没有要加载的文件 -- httparty (LoadError)

我已经使用安装了 httparty gem

sudo gem install httparty

什么不见​​了?

4

6 回答 6

8

在需要任何宝石之前,您需要先要求 ruby​​gems。

require 'rubygems'
require 'httparty'
于 2009-10-07T12:45:11.597 回答
1

你需要 ruby​​gems

require 'rubygems'

在你需要 httparty 之前

于 2009-10-07T12:44:51.783 回答
1

如果你这样做

require "httparty"

ruby 在不同的位置搜索 httparty.rb 或 httparty.so。ruby 搜索的位置以及存储在全局变量 $ 中的顺序:

在我的 debian 系统上,它看起来像这样:

$: # =>  ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/x86_64-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/x86_64-linux", "."]

但是httparty.rb在/var/lib/gems/1.8/gems/httparty-0.4.5/lib/httparty.rb,所以找不到。当你这样做

require "rubygems"

更改了 Kernel#require 方法,以查找 ruby​​gems。

require "rubygems" 使您的代码依赖于平台:

  • 有人可能会通过 ruby​​gems 以外的其他方法安装您的库
  • 一些 linux 发行版(例如 gentoo)使得不需要“rubygems”

在我的 debian 系统上,我将每个 ruby​​gems 库符号链接到 /usr/local/lib/site_ruby/1.8/,此路径包含在标准搜索路径 ($:) 中。您可以在http://tomayko.com/writings/require-rubygems-antipattern找到更多相关信息。

于 2009-10-07T13:36:31.503 回答
0

有些人认为在可分发的代码中要求使用 ruby​​gem 并不是一种好的做法。解决方案是require rubygems在从您的应用程序代码中加载您自己的新 gem 之前。(无论如何你都需要这样做)

于 2009-10-07T13:03:25.170 回答
0

我对线路有同样的问题:

gem "httparty", :git => 'https://github.com/jnunemaker/httparty.git'

当我转向:

gem "httparty"

一切都开始起作用了。

于 2012-04-25T10:14:50.450 回答
0

当您尝试使用 Ruby 创建 http 帖子但尚未完成 Rubygems 和 RVM 的设置时,可能会发生此错误。

  1. 首先,使用此处的教程检查 ruby​​gems 和 ruby​​gems-update 是否正确安装:http: //docs.rubygems.org/read/chapter/3

  2. 如果您使用的是 RVM,您还需要先创建一个 gemset 并选择一个 ruby​​ 版本。

$ rvm gemset 列表

如果这表明您处于开启状态(默认),那么您需要配置您的 RVM。

找到你想要使用的 ruby​​ 版本 ($ ruby​​ -v) 并在此处替换它:

$ rvm 使用 1.9.2-head@albinochipmunk --create

  1. 安装 ruby​​gems 并且您的 RVM 具有选定的 gemset 和 ruby​​ 版本后,您将能够在没有 sudo 的情况下安装 httparty:

$ 宝石安装 httparty

使用 sudo 安装 httparty 可能会破坏 RVM 配置,因此您要避免这种情况。此外,使用新的 RVM gemset 意味着您可能需要重新安装一些 gem。

于 2013-02-14T15:45:38.587 回答