Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 红宝石之路奇观_Ruby On Rails_Ruby_Rubygems_Gem - Fatal编程技术网

Ruby on rails 红宝石之路奇观

Ruby on rails 红宝石之路奇观,ruby-on-rails,ruby,rubygems,gem,Ruby On Rails,Ruby,Rubygems,Gem,这几天来,我一直在追根究底地研究这个问题,而且它比以往任何时候都要遥远。我运行的是Rails 3.1、Ruby 1.9、Gem 1.8.15、Linux RHEL 4环境 简化的问题是ruby“require”(和rails)无法找到我的应用程序所需的所有宝石。而且似乎gems require找不到与*.rb不同的gem名称。例如,“require'sass'”定位sass.rb。但是“require'therubyracer'”无法在库中找到v8.rb。没有名为“therubyracer.rb

这几天来,我一直在追根究底地研究这个问题,而且它比以往任何时候都要遥远。我运行的是Rails 3.1、Ruby 1.9、Gem 1.8.15、Linux RHEL 4环境

简化的问题是ruby“require”(和rails)无法找到我的应用程序所需的所有宝石。而且似乎gems require找不到与*.rb不同的gem名称。例如,“require'sass'”定位sass.rb。但是“require'therubyracer'”无法在库中找到v8.rb。没有名为“therubyracer.rb”的文件。同样的 使用“therubyrhino”-库中没有“therubyrhino.rb”,但有一个“rhino.rb”

即使这些gem在我的Gemfile中,Bundle安装也不会抛出错误

以下是一个例子:

首先,为了演示安装了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”,并且在路径中,bundle工作了,“gem which”也找不到它。这颗宝石在

与下面的“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
但是Require不喜欢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' 
但正如我所提到的,在我的GEM文件中使用“therubyrhino”时,Bundle安装可以正常工作

这是我的gem路径,我正在手动设置以进行测试:

>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需要工作吗?对

  >ruby -rubygems -e 'require "sass"' 
  (no error)

谢谢你的帮助

您必须使用
gem
命令加载gem,然后才能
要求它。例如:

$ irb
1.9.3p0 :001 > gem 'therubyracer'
 => true 
1.9.3p0 :002 > require 'v8'
 => true 

如果您的
GEM文件中有
therubyracer
,那么您只需在应用程序中执行
要求“v8”
。或者,您可以在
GEM文件中指定该库:

gem "therubyracer", :require => 'v8'
如果您使用的是
Bundler.require
,则上行将自动调用
require'v8'

请注意,
therubyrhino
仅用于
jruby
;您不能将它与C Ruby(MRI)一起使用