timpone
timpone

Reputation: 19979

rails, new ubuntu install, capistrano, rvm issues

I'm a new user to Capistrano and using it to deploy a rails 3.1 app. There seems to be an issue with gem installation on the remote server.

I have the following questions:

  1. It looks like cap runs bundle install on the gemfile? Are there any dependencies for this to work successfully? I have rvm and bundler on my server. Does it need rails installed already?

  2. I have manually set the bundle_cmd in my deploy.rb like this:

    set :bundle_cmd, '/usr/local/rvm/gems/ruby-1.9.2-p290/bin/bundle'
    

    Should this be correct?

  3. Is there a way to have confirmation on a cap deploy that ALL the required gems are there? Or what is the best way to debug a failed bundle install on the remote server? Can you call something like cap gem-list; was hoping something like cap invoke=gem list would do it but doesn't look like it.

Edit #1

I'm getting the following error: failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'default' -c 'cd /data/sites/myserver/apps/myapp/releases/20111204181321 && bundle install --gemfile /data/sites/myserver/apps/myapp/releases/20111204181321/Gemfile --path /data/sites/myserver/apps/myapp/shared/bundle --deployment --quiet --without development test'" on 173.230.xxx.xxx

If I go into a previous release, and run bundle install, it says that everything installed correctly which it didn't.

It says:

Your bundle is complete! It was installed into /data/sites/myserver/apps/myapp/shared/bundle

but if I go in there, there is nothing other than the ruby 1.9.1 which to the best of my knowledge I didn't install (using ruby 1.9.2-p290)

Is there a way in capistrono to specify it not to delete the deployed release so that I can debug that explicitly? Shoud I need to hardcode the path to my bundler in my deploy.rb script?

thx again

EDIT 2 If I go into the current release at:

/data/sites/myserver/apps/myapp/current

and run:

$ which bundle
/usr/local/rvm/gems/ruby-1.9.2-p290/bin//bundle

I get:

$ bundle install
/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler (>= 0) amongst [minitest-1.6.0,rake-0.8.7, rdoc-2.5.8] (Gem::LoadError)
from /usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
from /usr/local/rvm/gems/ruby-1.9.2-p290/bin/bundle:18:in `<main>'

Upvotes: 1

Views: 1435

Answers (1)

HectorMalot
HectorMalot

Reputation: 1120

  1. You dont need to have rails installed already, but I do think that you need to have bundler installed. gem install bundler

  2. You can use RVM and bundler integration from capistrano. In that case you dont have to set the path to bundler.

    $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
    require "rvm/capistrano"     
    require "bundler/capistrano"     # Load RVM's capistrano plugin.
    
    set :rvm_type, :system
    set :rvm_ruby_string, '1.9.2@gemset_name'
    
  3. You can use 'cap shell' to run commands through Capistrano on the server. You could use this to check the installation of all your gems. Use cap -T to see all possibilities.

On a side note, do you really need rvm gemsets for your app? I use RVM to install and update my rubies on my production server, but I let Bundler handle the separation of my gems. Since the default bundler settings in production put all your gems in vendor/bundle, this already separates your gems from each other. This works great with Capistrano too.

See a similar question and answer here. Some more information a capistrano/bundler/rvm/passenger setup can be find in this tutorial.

Upvotes: 1

Related Questions