2016-02-11 16 views
1

我已經部署了一個具有與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。

回答

1

我已經證實,這是Rubygems 2.5.2的一個問題。直到2.5.1的所有版本都能正常工作。

我還沒有找到一種方法來降級RubyGems的,所以我的解決辦法是使用rbenv重新安裝JRuby和單獨離開RubyGems的,或者如果你需要比默認更新的版本,運行:

gem update --system 2.5.1 
相關問題