首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么jruby创业板有奇怪的文件夹结构?

为什么jruby创业板有奇怪的文件夹结构?
EN

Stack Overflow用户
提问于 2013-05-13 15:34:03
回答 1查看 481关注 0票数 2

据我所知,创业板的文件夹构造器应该有一个名为lib的文件夹,而该文件夹中有一个<gem-name>.rb文件。但是,当我使用JRuby1.6.8并执行bundle install安装jruby时,我打开了C:\jruby-1.6.8\lib\ruby\gems\1.8\gems\jruby-openssl-0.8.2,没有看到一个rb文件,而是看到了更多的子文件夹,如下所示:

代码语言:javascript
复制
jruby-openssl-0.8.2\
+---lib\
|   +---1.8\
|   |   +---openssl\
|   |   +---openssl.rb
|   +---1.9\
|   |   +---openssl\
|   |   +---openssl.rb
|   +---ruby\
|   |   +---shared\
|   +---shared\
|       +---jopenssl\
|       +---openssl\
|       +---openssl.rb
+---test\
    +---java\

jruby没有遵循标准的gem文件夹结构是有原因的吗?具体来说,我似乎在使用gem 'jruby-openssl'命令时遇到了问题。如果jruby文件夹在jruby文件夹中,那么gem命令应该找到并正确加载LOAD_PATH吗?

错误详细信息:

以下是C:\apachetomcat632\logs\MyWebapp.log中出现的错误

代码语言:javascript
复制
--- Backtrace
LoadError: OpenSSL::Cipher requires the jruby-openssl gem
            (root) at file:/C:/apachetomcat632/shared/lib/jruby-complete.jar!/META-INF/jruby.home/lib/ruby/site_ruby/shared/jruby/openssl/autoloads/cipher.rb:8
  MessageEncryptor at file:/C:/apachetomcat632/shared/lib/jruby-complete.jar!/META-INF/jruby.home/lib/ruby/site_ruby/shared/jruby/openssl/autoloads/cipher.rb:24
     ActiveSupport at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/activesupport-3.2.11/lib/active_support/message_encryptor.rb:12
            (root) at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/activesupport-3.2.11/lib/active_support/message_encryptor.rb:4
           require at org/jruby/RubyKernel.java:1062
           require at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251
   load_dependency at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:236
           require at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251
   eager_autoload! at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/activesupport-3.2.11/lib/active_support/message_encryptor.rb:43
              each at org/jruby/RubyArray.java:1620
   eager_autoload! at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/activesupport-3.2.11/lib/active_support/dependencies/autoload.rb:43
         Bootstrap at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/railties-3.2.11/lib/rails/application/bootstrap.rb:20
     instance_exec at org/jruby/RubyKernel.java:2091
               run at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/railties-3.2.11/lib/rails/initializable.rb:30
  run_initializers at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/railties-3.2.11/lib/rails/initializable.rb:55
              each at org/jruby/RubyArray.java:1620
  run_initializers at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/railties-3.2.11/lib/rails/initializable.rb:54
       initialize! at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/railties-3.2.11/lib/rails/application.rb:136
              send at org/jruby/RubyKernel.java:2105
    method_missing at file:C:/apachetomcat632/shared/lib/cfe-gems.jar!/gems/railties-3.2.11/lib/rails/railtie/configurable.rb:30
            (root) at C:/apachetomcat632/webapps/Bank62P/WEB-INF/rails/config/environment.rb:5
           require at org/jruby/RubyKernel.java:1062
  load_environment at C:/apachetomcat632/webapps/Bank62P/WEB-INF/rails/config/environment.rb:23
  load_environment at file:/C:/apachetomcat632/shared/lib/jruby-rack.jar!/jruby/rack/rails_booter.rb:65
            (root) at <script>:1

下面是整个cipher.rb文件:

代码语言:javascript
复制
require 'rubygems'

# try to activate jruby-openssl gem for OpenSSL::SSL, raising error if gem not present
begin
  gem 'jruby-openssl'
  require 'openssl.rb'
rescue Gem::LoadError => e
  raise LoadError.new("OpenSSL::Cipher requires the jruby-openssl gem")
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-13 16:14:20

要添加到tadman的回答中,如果您查看gemspec (gems/1.8/specifications/jruby-openssl-0.8.2.gemspec),您将看到以下一行:

代码语言:javascript
复制
s.require_paths = ["lib/shared"]

当您在代码中require 'openssl'时,它将加载shared dir中的一个。我相信该文件将决定是加载1.8版本还是1.9版本。

这么说..。

当我尝试使用0.8.2进行require 'openssl'时,会得到一个错误:

代码语言:javascript
复制
LoadError: no such file to load -- openssl/dummy

当我使用最新版本(0.8.8)时,效果很好。试着升级。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16525872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档