我已部署了一台新服务器,该服务器具有与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是否被破坏。
答案 0 :(得分:1)
我已经确认,这是Rubygems 2.5.2的一个问题。从2.5.1开始的所有版本都能正常工作。
我还没有找到降级rubygems的方法,所以对我来说解决方案是使用rbenv重新安装jruby并单独留下rubygems,或者如果你需要比默认版本更新的版本,请运行:
gem update --system 2.5.1