Capistrano doesn't install
Asked Answered
S

4

5

Whenever I try to run cap production deploy it fails at the following command

[ebbf9fde] Command: cd /var/www/apps/my_app/releases/20150803171251 && /usr/local/rvm/bin/rvm 2.2.2 do bundle install --path /var/www/apps/my_app/shared/bundle --without development test --deployment --quiet
DEBUG [ebbf9fde]    /usr/local/rvm/scripts/set: line 19: exec: bundle: not found

I have a added a user 'deploy' to do this deployment, the ouput of rvm list is

$ rvm list

rvm rubies

=* ruby-2.2.2 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

Further running gem list the output is

$ gem list

*** LOCAL GEMS ***

bigdecimal (1.2.6)
bundler-unload (1.0.2)
executable-hooks (1.3.2)
gem-wrappers (1.2.7)
io-console (0.4.3)
json (1.8.1)
minitest (5.4.3)
passenger (5.0.15)
power_assert (0.2.2)
psych (2.0.8)
rack (1.6.4)
rake (10.4.2)
rdoc (4.2.0)
rubygems-bundler (1.4.4)
rvm (1.11.3.9)
test-unit (3.0.8)

My Capfile contents are

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

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

Finally my deploy.rb contains the following data.

lock '3.4.0'

set :app_host, 'ip-address-here'
set :application, 'my_app'
set :repo_url, '[email protected]:<not_right>/my_app.git'

set :rvm_type, :system
set :rvm_ruby_version, '2.2.2'
set :passenger_rvm_ruby_version, '2.2.2'
set :rbenv_ruby, '2.2.2'

set :deploy_to, '/var/www/apps/my_app'

set :scm, :git

set :format, :pretty

set :log_level, :debug

set :pty, true

set :conditionally_migrate, true

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')

set :keep_releases, 5

set :migrate_env, "#{ fetch(:stage) }"


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

  task :httpd_graceful do
    on roles(:web), in: :sequence, wait: 5 do
      execute :sudo, "service httpd graceful"
    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
end


namespace :deploy_prepare do
  desc 'Configure virtual host'
  task :create_vhost do
    on roles(:web), in: :sequence, wait: 5 do
    vhost_redirect_config = <<-EOF
Redirect permanent /#{ fetch(:application) } http://#{ fetch(:app_host) }/#{ fetch(:application) }/
    EOF

    vhost_location_config = <<-EOF
Alias /#{fetch(:application)} #{fetch(:deploy_to)}/current/public

<Location /#{fetch(:application)}>
   PassengerBaseURI /#{ fetch(:application) }
   PassengerAppRoot #{ fetch(:deploy_to) }/current/
   PassengerRuby /usr/local/rvm/wrappers/ruby-#{ fetch(:rvm_ruby_version) }/ruby
   RailsEnv #{ fetch(:stage) }
</Location>

<Directory #{ fetch(:deploy_to) }/current/public >
  Allow from all
  Options -MultiViews
</Directory>
    EOF
    execute :echo, "\"#{ vhost_redirect_config }\"", ">", "/etc/httpd/conf.d/redirects/#{ fetch(:application) }.conf"
    execute :echo, "\"#{ vhost_location_config }\"", ">", "/etc/httpd/conf.d/apps/#{ fetch(:application) }.conf"
  end
end
end

after "deploy:updated", "deploy:cleanup"
after "deploy:finished", "deploy_prepare:create_vhost"
after "deploy_prepare:create_vhost", "deploy:httpd_graceful"
after "deploy:httpd_graceful", "deploy:restart"

I am getting the following error

DEBUG [298e6d4e] Command: cd /var/www/apps/oxygen/releases/20150803172155 && /usr/local/rvm/bin/rvm 2.2.2 do bundle install --path /var/www/apps/oxygen/shared/bundle --without development test --deployment --quiet
DEBUG [298e6d4e]    /usr/local/rvm/scripts/set: line 19: exec: bundle: not found
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: bundle exit status: 127
bundle stdout: /usr/local/rvm/scripts/set: line 19: exec: bundle: not found
bundle stderr: Nothing written

SSHKit::Command::Failed: bundle exit status: 127
bundle stdout: /usr/local/rvm/scripts/set: line 19: exec: bundle: not found
bundle stderr: Nothing written

Tasks: TOP => deploy:updated => bundler:install
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as [email protected]: bundle exit status: 127
bundle stdout: /usr/local/rvm/scripts/set: line 19: exec: bundle: not found
bundle stderr: Nothing written
Scratch answered 3/8, 2015 at 17:25 Comment(0)
C
8

Just try gem install bundler on the server once to install bundler into the rvm gemset, as its not in the list of your gem list.

In general try to ensure that the bundle command runs when you log into your server via ssh. Capistrano doesn't do magic, it just logs in via ssh and issues commands. You can always see what commands capistrano issues, like in your example cd /var/www/apps/oxygen/releases/20150803172155 && /usr/local/rvm/bin/rvm 2.2.2 do bundle install --path /var/www/apps/oxygen/shared/bundle --without development test --deployment --quiet and try them yourself when something fails.

Curlicue answered 3/8, 2015 at 19:24 Comment(0)
E
0

Be sure you have bundler installed in the correct gemset.

I got this error and was scratching my head because bundler was installed in the default gemset, but it was not in the one I was using for my rails application.

When I realized it I was like, "doh!"

Just thought I would post this here, hopefully it will help someone else.

Elroyels answered 5/9, 2015 at 16:22 Comment(0)
L
0

This didnt work for me, gem install bundler

I realized I didn't set my deploy.rb file correctly.

So because I am using RVM, I checked the rvm list for the ruby version

   jruby-1.7.19 [ x86_64 ]
=* ruby-2.2.1 [ x86_64 ]

then config my deploy.rb file to set :rvm_ruby_version, 'ruby-2.2.1'

Laflam answered 5/2, 2016 at 12:39 Comment(0)
B
0

On your server

rvm 2.2.2@gemset-name do gem install bundler

Source: https://github.com/capistrano/rvm/issues/65#issuecomment-94108188

Bufford answered 15/3, 2019 at 9:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.