Bundle failing on JRuby with "TypeError: can't convert Regexp into String"

Bundle failing on JRuby with "TypeError: can't convert Regexp into String"

我已经部署了一个新服务器,它具有与其他服务器完全相同版本的 JRuby (1.7.22)、Java (openjdk-7-jre-headless 7u51) 和捆绑器。两台服务器都是 运行ning Ubuntu 14.04,但新服务器有一些较新的软件包。

我使用 Capistrano 将相同版本的项目部署到新服务器。

Capistrano 运行bundle时(或者我自己做的时候),出现如下错误和callstack:

TypeError: can't convert Regexp into String
                 end_with? at org/jruby/RubyString.java:5281
                     path= at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/shared/rubygems/path_support.rb:62
                initialize at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/shared/rubygems/path_support.rb:35
                     paths at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/shared/rubygems.rb:329
                      path at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/shared/rubygems.rb:352
                      dirs at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/shared/rubygems/defaults/jruby.rb:84
                 stubs_for at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/shared/rubygems/specification.rb:850
                 find_name at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/gems/shared/gems/bundler-1.10.6/lib/bundler/rubygems_integration.rb:639
                    report at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/gems/shared/gems/bundler-1.10.6/lib/bundler/env.rb:23
                      each at org/jruby/RubyArray.java:1613
                    report at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/gems/shared/gems/bundler-1.10.6/lib/bundler/env.rb:22
  request_issue_report_for at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/gems/shared/gems/bundler-1.10.6/lib/bundler/friendly_errors.rb:66
      with_friendly_errors at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/gems/shared/gems/bundler-1.10.6/lib/bundler/friendly_errors.rb:41
                    (root) at /usr/local/rbenv/versions/jruby-1.7.22/lib/ruby/gems/shared/gems/bundler-1.10.6/bin/bundle:18
                      load at org/jruby/RubyKernel.java:1059
                    (root) at /usr/local/rbenv/versions/jruby-1.7.22/bin/bundle:22

我做了一些调试,可以肯定的是,Gem.path_separator 是一个正则表达式。我在本地机器上使用 JRuby 进行了相同的调试,几个月来安装了相同版本的 JRuby,虽然我可以确认 Gem.path_separator 也是一个正则表达式,但我无法重现该问题。

我能够通过从工作服务器复制整个 /usr/local/rbenv/versions/jruby-1.7.22 文件夹来让服务器工作。

我正在使用 rbenv 安装 JRuby,安装方式如下:git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build。我将提交重置为与旧服务器上的提交相同,删除 /usr/local/rbenv/versions/jruby-1.7.22 文件夹并重新安装 jruby 后,我仍然得到相同的结果。

我在这个服务器上看不到任何东西会影响 JRuby 是否允许 Regex 匹配字符串的结尾。

编辑:还想补充以下内容在 .jrubyrc 文件中(未更改):

compat.version=2.0

编辑:我离答案越来越近了。原来我使用的安装脚本有 运行 gem update --system。 rubygems 的版本不同(2.4.8 与 2.5.2)。我正在查看特定版本的 ruby​​gems 是否已损坏。

我已经确认,这是 Rubygems 2.5.2 的问题。 2.5.1 之前的所有版本都可以正常工作。

我还没有找到降级 ruby​​gems 的方法,所以对我来说,解决方案是使用 rbenv 重新安装 jruby 并单独保留 ruby​​gems,或者如果您需要比默认版本更新的版本,运行:

gem update --system 2.5.1