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)。我正在查看特定版本的 rubygems 是否已损坏。
我已经确认,这是 Rubygems 2.5.2 的问题。 2.5.1 之前的所有版本都可以正常工作。
我还没有找到降级 rubygems 的方法,所以对我来说,解决方案是使用 rbenv 重新安装 jruby 并单独保留 rubygems,或者如果您需要比默认版本更新的版本,运行:
gem update --system 2.5.1
我已经部署了一个新服务器,它具有与其他服务器完全相同版本的 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)。我正在查看特定版本的 rubygems 是否已损坏。
我已经确认,这是 Rubygems 2.5.2 的问题。 2.5.1 之前的所有版本都可以正常工作。
我还没有找到降级 rubygems 的方法,所以对我来说,解决方案是使用 rbenv 重新安装 jruby 并单独保留 rubygems,或者如果您需要比默认版本更新的版本,运行:
gem update --system 2.5.1