Capistrano deployment error Can't activate jruby-openssl-0.9.5-java
Question: 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?


Answer: 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.

