我已經部署了一個具有與JRuby(1.7.22),Java(openjdk-7-jre-headless 7u51)完全相同版本的新服務器)和捆綁器作爲其他服務器。兩臺服務器都運行Ubuntu 14.04,但新的服務器有一些較新的軟件包。捆綁在JRuby上出現「TypeError:無法將Regexp轉換爲字符串」的故障
我使用Capistrano將相同版本的項目部署到新服務器。
當Capistrano的運行包(或當我做我自己),下面的錯誤和調用堆棧都:
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
也是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是否允許正則表達式匹配字符串的末尾。
編輯:也想補充一點,下面是在.jrubyrc
文件(沒有改變):
compat.version=2.0
編輯:我越來越接近答案。原來我使用的安裝腳本運行了gem update --system
。 rubygems的版本不同(2.4.8 vs 2.5.2)。我正在研究是否破解了特定版本的rubygems。