[英]Ruby Gems Path Weirdness
我已經在這個問題上追了好幾天了,現在比以往任何時候都更遠了。 我正在運行Rails 3.1,Ruby 1.9,Gem 1.8.15,Linux RHEL 4環境。
簡化的問題是ruby'require'(和rails)無法找到我的應用程序所需的所有寶石。 並且似乎寶石需要找不到具有與* .rb不同的寶石名稱。 例如,“require'sass”'找到sass.rb. 但是“require'therubyracer'”無法在lib中找到v8.rb。 沒有名為'therubyracer.rb'的文件。 與'therubyrhino'相同 - 沒有'therubyrhino.rb',但lib中有'rhino.rb'。
即使這些gem在我的Gemfile中,Bundle install也不會拋出錯誤。
這是一個例子:
首先,要演示安裝的gem:
>locate 'rhino.rb'
/usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
/usr/local/lib/ruby/gems/1.9.1/gems/gems/therubyrhino-1.73.1/lib/rhino.rb
即使安裝了“therubyrhino”,並且在路徑和捆綁工作中,“寶石哪個”找不到它。 這個寶石就在
與'sass'相同的路徑,在下面,它可以找到。 這是錯誤:
gem which 'therubyrhino'
ERROR: Can't find ruby library file or shared library therubyrhino
請注意,gem可以在gem中找到rhino.rb文件,因此路徑必須正常工作。
>gem which rhino
/usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
要求不喜歡rhino.rb:
ruby -rubygems -e 'require "rhino"'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `
require': no such file to load -- java (LoadError)
並且它無法通過名稱找到寶石。
ruby -rubygems -e 'require "therubyrhino"'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in ` require':
no such file to load -- therubyrhino (LoadError) from
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in ` require'
但正如我所提到的,我的Gemfile中有'therubyrhino',Bundle安裝有效。
這是我的寶石路徑,我手動設置測試:
>export GEM_PATH=/usr/local/lib/ruby/gems/1.9.1:/usr/local/lib/ruby/gems/1.9.1/gems:/usr/local/lib/ruby/gems/1.9.1/gems/gem
>gem env
...
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.15
- RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [i686-linux]
- INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /usr/local/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /usr/local/lib/ruby/gems/1.9.1
- /usr/local/lib/ruby/gems/1.9.1/gems
- /usr/local/lib/ruby/gems/1.9.1/gems/gem
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
最后,這是一個生活很美好並需要工作的案例。 一切都很好,並且gem name = lib name(... / sass / lib / sass.rb)的前綴。 首先我們可以看到安裝了sass gem:
>locate sass.rb
/usr/local/lib/ruby/gems/1.9.1/gems/sass-3.1.14/lib/sass.rb
/usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/vendor/sass/lib/sass.rb
/usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/lib/sass.rb
寶石可以找到嗎? 是。
>gem which sass
/usr/local/lib/ruby/gems/1.9.1/gems/haml-3.1.4/lib/sass.rb
紅寶石'需要'工作嗎? 是。
>ruby -rubygems -e 'require "sass"'
(no error)
謝謝你的幫助。
如果您的therubyracer
中有Gemfile
,那么您在應用中require 'v8'
做的就是require 'v8'
。 或者您可以在Gemfile
指定它:
gem "therubyracer", :require => 'v8'
如果您使用Bundler.require
,上面的行將自動調用Bundler.require
require 'v8'
。
請注意, therubyrhino
僅適用於jruby
; 你不能用它與C Ruby(MRI)。
在能夠require
之前,您必須使用gem
命令加載gem。 例如 :
$ irb
1.9.3p0 :001 > gem 'therubyracer'
=> true
1.9.3p0 :002 > require 'v8'
=> true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.