簡體   English   中英

Ruby Gems Path Weirdness

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM