要求库返回“缺少文件”消息

时间:2009-10-07 12:44:01

标签: ruby rubygems dependencies gem require

我有一个使用珠宝商创建的小应用程序。珠宝商生成一个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:在`require'中:没有要加载的文件 - httparty(LoadError)

我已经使用

安装了httparty gem
sudo gem install httparty

缺少什么?

6 个答案:

答案 0 :(得分:8)

在需要任何宝石之前,你需要要求rubygems。

require 'rubygems'
require 'httparty'

答案 1 :(得分:1)

你需要要求rubygems

require 'rubygems'

在您需要httparty

之前

答案 2 :(得分: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"

更改了内核#require方法,以查找rubygems。

要求“rubygems”使您的代码平台依赖:

  • 有人可能会通过rubygems
  • 之外的其他方法安装您的库
  • 某些Linux发行版(例如gentoo)让“rubygems”无法发布

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

答案 3 :(得分:0)

Some people do not consider it good practise要求可分发代码中的rubygems。在从应用程序代码加载自己的新gem之前,解决方案是require rubygems。 (无论如何你都需要这样做)

答案 4 :(得分:0)

我遇到同样的问题:

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

当我转向:

gem "httparty"
一切都开始奏效了。

答案 5 :(得分:0)

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

  1. 首先,使用以下教程检查rubygems和rubygems-update是否正确安装:http://docs.rubygems.org/read/chapter/3

  2. 如果你正在使用RVM,你还需要创建一个gemset并首先选择一个ruby版本。

  3. $ rvm gemset list

    如果显示您已启用(默认),则需要配置RVM。

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

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

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

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