使用" TypeError:在JRuby上捆绑失败:无法将Regexp转换为String"

时间:2016-02-11 22:28:18

标签: rubygems jruby rbenv

我已部署了一台新服务器,该服务器具有与JRuby(1.7.22)完全相同的版本,Java(openjdk-7-jre-headless 7u51)和捆绑器作为其他服务器。两台服务器都运行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是Regexp。我在我的本地计算机上使用JRuby进行了相同的调试,该计算机已经安装了相同版本的JRuby数月,虽然我可以确认Gem.path_separator也是Regexp,但我无法重现该问题

我能够通过从工作服务器复制整个/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 vs 2.5.2)。我正在努力查看特定版本的rubygems是否被破坏。

1 个答案:

答案 0 :(得分:1)

我已经确认,这是Rubygems 2.5.2的一个问题。从2.5.1开始的所有版本都能正常工作。

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

gem update --system 2.5.1