2009-10-07 85 views
2

我有一個小應用程序,我用珠寶商創建。珠寶商生成一個lib /目錄,我想寫我的代碼。需要庫返回'缺少文件'消息

這種寶石我創建依賴於httparty寶石,所以,在我的Rakefile我把

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

在我的執行文件,我把

require 'httparty' 

但是當我執行它,我得到:

LIB/my_app.rb:1:在`需要':沒有這樣的文件來加載 - httparty(LoadError)

我已經安裝使用

sudo gem install httparty 

什麼缺少httparty寶石?

回答

8

你需要不需要任何寶石之前需要RubyGems的。

require 'rubygems' 
require 'httparty' 
+0

完美!謝謝 – 2009-10-07 12:49:19

+0

這隻能治癒症狀而不是病態。 – johannes 2009-10-08 21:02:03

1

您需要的RubyGems需要

require 'rubygems' 

您需要之前httparty

0

Some people do not consider it good practise要求在可分發代碼中使用rubygems。解決方案是在從應用程序代碼加載您自己的新寶石之前,先登錄require rubygems。如果你

require "httparty" 

紅寶石在httparty.rb或httparty.so不同位置搜索(你需要做的是反正)

1

。紅寶石在哪裏搜索和以何種順序存儲在全局變量$:

在我的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的。)使它uneccasary要求 「RubyGems的」

在我的debian系統中,我將每個rubygems庫符號鏈接到/usr/local/lib/site_ruby/1.8/,此路徑包含在標準搜索路徑($ :)中。你可以在http://tomayko.com/writings/require-rubygems-antipattern找到更多關於此的信息。

0

我曾與行同樣的問題:

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

當我轉到:

gem "httparty" 

一切開始工作。

0

當您嘗試使用Ruby製作http帖子,但尚未完成設置Rubygems和RVM時,可能會發生此錯誤。

  1. 首先,檢查RubyGems的,RubyGems和更新安裝使用教程正確位置:http://docs.rubygems.org/read/chapter/3

  2. 如果你使用RVM,您還需要創建一個寶石,然後選擇一個紅寶石版本第一。

$ RVM寶石列表

如果這說明你在(默認),那麼你就需要配置RVM。

找到您要使用的紅寶石版本($紅寶石-v)會工作,並在此替換它:

$ RVM使用[email protected] --create

  1. 後您的RubyGems是安裝並RVM已選定的寶石和紅寶石版本,你就可以安裝httparty沒有sudo:

$創業板安裝httparty

使用sudo安裝httparty可能會破壞RVM配置,因此您想避免這種情況。此外,使用新的RVM gemset意味着您可能需要重新安裝一些寶石。