简体   繁体   中英

Capistrano deployment error Can't activate jruby-openssl-0.9.5-java

I have developed a new Rails (4.1.4) app in JRuby (1.7.10) and I am trying to deploy it with Capistrano v3 on a remote vps. The error I am getting looks like:

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/jruby-1.7.10@global/gems/bundl
DEBUG[551a80fb]     er-1.7.3/lib/bundler/installer.rb:1
DEBUG[551a80fb]     
DEBUG[551a80fb]                   (root) at /home/deployer/.rvm/gems/jruby-1.7.10@global/gems/bundler-1.7.3/lib/bundler/installer.rb:2
DEBUG[551a80fb]     
DEBUG[551a80fb]                   (root) at /home/deployer/.rvm/gems/jruby-1.7.10@global/gems/bundler-1.7.3/lib/bundler/cli/install.rb:1
DEBUG[551a80fb]                      run at /home/deployer/.rvm/gems/jruby-1.7.10@global/gems/bundler-1.7.3/lib/bundler/cli/install.rb:78
DEBUG[551a80fb]     
DEBUG[551a80fb]                  install at /home/deployer/.rvm/gems/jruby-1.7.10@global/gems/bundler-1.7.3/lib/bundler/cli.rb:145
DEBUG[551a80fb]     
DEBUG[551a80fb]                      run at /home/deployer/.rvm/gems/jruby-1.7.10@global/gems/bundler-1.7.3/lib/bundler/vendor/thor/command.rb:27
DEBUG[551a80fb]     
DEBUG[551a80fb]           invoke_command at /home/deployer/.rvm/gems/jruby-1.7.10@global/gems/bundler-1.7.3/lib/bundler/vendor/thor/invocation.rb:121
DEBUG[551a80fb]     
DEBUG[551a80fb]                 dispatch at /home/deployer/.rvm/gems/jruby-1.7.10@global/gems/bundler-1.7.3/lib/bundler/vendor/thor.rb:363
DEBUG[551a80fb]     
DEBUG[551a80fb]                    start at /home/deployer/.rvm/gems/jruby-1.7.10@global/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/jruby-1.7.10@global/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/jruby-1.7.10@global/bin/jruby_executable_hooks:15

This is how the Gemfile looks like:

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, 'git@bitbucket.org: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

It seems the root of the error is Thor gem. If I remove bundle folder inside shared directory then it installs all the gems. But it fails next time onwards. With 'remove_shared_bundle' task I tried to delete the bundle folder before before each deploy which worked. But then it would do a fresh installation every time which is time taking.

Is there a remedy for this issue?

I think this issue might be related to JRuby's default gems being unchangeable in 1.7.10 ... it has been fixed since, so the immediate thing is to try JRuby 1.7.15 (or at least 1.7.13)

I would than not declare gem 'jruby-openssl', '0.9.5' in the Gemfile (remove it completely) let JRuby use whatever it has available - wonder if there are any gem pulling it in, that could also help (if there's no gem pulling it into the bundle as a dependency) resolve it under 1.7.10.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM