2014-09-19 49 views
0

我在JRuby(1.7.10)中開發了一個新的Rails(4.1.4)應用程序,我試圖在Capistrano v3上部署它遠程vps。錯誤我得到的樣子:Capistrano部署錯誤無法激活jruby-openssl-0.9.5-java

INFO[551a80fb] Running ~/.rvm/bin/rvm default do bundle install --binstubs /home/deployer/apps/APPNAME/shared/bin --path /home/deployer/apps/APPNAME/shared/bundle --without development test on example.net 
DEBUG[551a80fb] Command: cd /home/deployer/apps/APPNAME/releases/20140919052426 && ~/.rvm/bin/rvm default do bundle install --binstubs /home/deployer/apps/APPNAME/shared/bin --path /home/deployer/apps/APPNAME/shared/bundle --without development test 
DEBUG[551a80fb]  Gem::LoadError: can't activate jruby-openssl-0.9.5-java, already activated jruby-openssl-0.9.3 
DEBUG[551a80fb]  
DEBUG[551a80fb]  raise_if_conflicts at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/specification.rb:1988 
DEBUG[551a80fb]  
DEBUG[551a80fb]     activate at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/specification.rb:1238 
DEBUG[551a80fb]  
DEBUG[551a80fb]      gem at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_gem.rb:48 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:46 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/security.rb:11 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at org/jruby/RubyKernel.java:1083 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/package.rb:1 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at org/jruby/RubyKernel.java:1083 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/package.rb:43 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at org/jruby/RubyKernel.java:1083 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55 
DEBUG[551a80fb]  
DEBUG[551a80fb]     require at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:53 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/dependency_installer.rb:1 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/dependency_installer.rb:4 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/gems/[email protected]/gems/bundl 
DEBUG[551a80fb]  er-1.7.3/lib/bundler/installer.rb:1 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/installer.rb:2 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/cli/install.rb:1 
DEBUG[551a80fb]      run at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/cli/install.rb:78 
DEBUG[551a80fb]  
DEBUG[551a80fb]     install at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/cli.rb:145 
DEBUG[551a80fb]  
DEBUG[551a80fb]      run at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/vendor/thor/command.rb:27 
DEBUG[551a80fb]  
DEBUG[551a80fb]   invoke_command at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/vendor/thor/invocation.rb:121 
DEBUG[551a80fb]  
DEBUG[551a80fb]     dispatch at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/vendor/thor.rb:363 
DEBUG[551a80fb]  
DEBUG[551a80fb]     start at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/vendor/thor/base.rb:440 
DEBUG[551a80fb]  
DEBUG[551a80fb]      load at org/jruby/RubyKernel.java:1099 
DEBUG[551a80fb]  
DEBUG[551a80fb]     start at /home/deployer/.rvm/gems/[email protected]/gems/bundler-1.7.3/lib/bundler/cli.rb:9 
DEBUG[551a80fb]  
DEBUG[551a80fb]      eval at org/jruby/RubyKernel.java:1119 
DEBUG[551a80fb]  
DEBUG[551a80fb]     (root) at /home/deployer/.rvm/gems/[email protected]/bin/jruby_executable_hooks:15 

這是怎樣的Gemfile看起來像:

source 'https://rubygems.org' 

ruby '1.9.3', :engine => 'jruby', :engine_version => '1.7.10' 

gem 'bouncy-castle-java', '<= 1.50' # my attempt to fix the version of jruby-openssl 
gem 'jruby-openssl', '0.9.5'  # to 0.9.5. Tried with 0.9.3 but with no effect. 
gem 'rails', '4.1.4' 
gem 'sass-rails', '~> 4.0.3' 
gem 'uglifier', '>= 1.3.0' 
gem 'therubyrhino' 
gem 'jquery-rails' 
gem 'jbuilder', '~> 2.0' 
gem 'sdoc', '~> 0.4.0', group: :doc 
gem 'activerecord-jdbcmysql-adapter' 
gem 'devise' 
gem 'devise_invitable', :github => 'scambra/devise_invitable' 
gem "paperclip" 
gem 'acts_as_list' 
gem 'pry-rails', group: :development 
gem 'rubyzip' 
gem 'to_bool', '~> 1.0.1' 
gem "jquery-fileupload-rails" 

# Use Capistrano for deployment 
gem 'capistrano', group: :development 
gem 'capistrano-rvm', group: :development 
gem 'capistrano-bundler', group: :development 
gem 'capistrano-rails', group: :development 
gem 'trinidad', require: false 
gem 'trinidad_init_services', require: false 
gem 'rvm1-capistrano3', require: false 

Capfile:

require 'capistrano/setup' 
require 'capistrano/deploy' 
require 'capistrano/rvm' 
require 'capistrano/bundler' 
require 'capistrano/rails' 
require 'capistrano/rails/assets' 
require 'capistrano/rails/migrations' 
require 'rvm1/capistrano3' 

Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } 

deploy.rb:

# config valid only for Capistrano 3.1 
lock '3.2.1' 

set :bundle_flags, '--deployment' # tried removing switch deployment if installing as system gem helps 

set :deploy_user, "deployer" 
set :application, 'APPNAME' 
set :repo_url, '[email protected]:user/repo.git' 
server "example.net", user: 'deployer', roles: [:web, :app, :db] 

set :rvm_type, :user     
set :rvm1_ruby_version, 'jruby-1.7.10' 

set :scm, :git 
set :pty, true 
set :deploy_to, "/home/#{fetch(:deploy_user)}/apps/#{fetch(:application)}" 
set :linked_files, %w{config/database.yml} 
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} 
set :keep_releases, 5 
after "deploy", "deploy:cleanup" 

namespace :deploy do 
    desc 'Restart application' 
    task :restart do 
    on roles(:app), in: :sequence, wait: 5 do 
     execute :touch, release_path.join('tmp/restart.txt') 
    end 
    end 

    after :publishing, :restart 

    after :restart, :clear_cache do 
    on roles(:web), in: :groups, limit: 3, wait: 10 do 
     # Here we can do anything such as: 
     # within release_path do 
     execute :rake, 'cache:clear' 
     # end 
    end 
    end 

    desc 'Delete shared bundle folder' 
    task :remove_shared_bundle do 
    on roles(:app), in: :sequence, wait: 5 do 
     execute :rm, "-fr", "#{shared_path}/bundle" 
    end 
    end 
    before :starting, :remove_shared_bundle 
end 

def template(from, to) 
    erb = File.read(File.expand_path("../config/recipes/templates/#{from}", File.dirname(__FILE__))) 
    # File.join(File.expand_path(File.dirname(__FILE__)), 'poi') 
    # put ERB.new(erb).result(binding), to 
    upload! StringIO.new(ERB.new(erb).result(binding)), to 
end 

namespace :deploy do 
    desc "Install everything onto the server" 
    task :install do 
    on roles(:all), in: :sequence, wait: 1 do 
     execute 'mkdir', '-p', fetch(:deploy_to) 
     execute :sudo, 'apt-get', '-y', "update" 
     execute :sudo, 'apt-get', '-y', "install", "build-essential zlib1g-dev libssl-dev libreadline-gplv2-dev python-software-properties curl git-core openjdk-7-jdk jsvc" 
    end 
    end 
end 

看來錯誤的根源是雷神寶石。如果我刪除共享目錄中的bundle文件夾,那麼它會安裝所有的gem。但下一次失敗。使用'remove_shared_bundle'任務時,我試圖在每個部署工作之前刪除捆綁文件夾。但是,每次都需要重新安裝,這是需要時間的。

對此問題有補救措施嗎?

+0

我有同樣的問題,但在jruby-1.7.15,1.7.16和1.7.18也。 – 2015-01-09 13:45:07

回答

1

我認爲這個問題可能與JRuby的默認寶石在1.7.10 中不可更改有關,它已經被修復,所以最近的事情是嘗試JRuby 1.7.15(或至少1.7.13)

我會比的Gemfile不會宣佈gem 'jruby-openssl', '0.9.5'(完全刪除)讓JRuby中使用任何有可用 - 不知道是否有任何寶石拉時,也可以幫助(如果沒有寶石拉入捆綁作爲依賴)在1.7.10下解決它。

+0

謝謝。升級到JRuby 1.7.15。這有助於消除此錯誤。 – intellidiot 2014-09-19 07:29:19