简体   繁体   中英

capistrano not working without rvm

I've just changed my development machine from rvm to rbenv, but my production machine is still using rvm. Now when I try and deploy I get this error message:

cap deploy
/home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:152:in `require': no such file to load -- rvm/capistrano (LoadError)
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:152:in `require'
    from ./config/deploy.rb:38:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:93:in `instance_eval'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:93:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:172:in `load_from_file'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:89:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:86:in `block in load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:86:in `each'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:86:in `load'
    from Capfile:4:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:93:in `instance_eval'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:93:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:172:in `load_from_file'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:89:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:86:in `block in load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:86:in `each'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/configuration/loading.rb:86:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/cli/execute.rb:65:in `block in load_recipes'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/cli/execute.rb:65:in `each'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/cli/execute.rb:65:in `load_recipes'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/cli/execute.rb:31:in `execute!'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/lib/capistrano/cli/execute.rb:14:in `execute'
    from /home/map7/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/capistrano-2.5.19/bin/cap:4:in `<top (required)>'
    from /home/map7/.rbenv/versions/1.9.2-p290/bin/cap:19:in `load'
    from /home/map7/.rbenv/versions/1.9.2-p290/bin/cap:19:in `<main>'

Here is my deploy.rb

require 'bundler/capistrano'
require 'thinking_sphinx/deploy/capistrano'

set :application, "myapp"
set :repository,  "myuser@localhost:/home/myuser/myapp"

# Deployment options
set :deploy_to, "/home/remoteuser/myapp"
set :deploy_via, :copy

# Remote user info
set :user, "myuser"
set :use_sudo, false
default_run_options[:pty] = true

# Version control system 
set :scm, :git
set :branch, "master"

# Add RVM's lib directory to the load path.
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))

# Load RVM's capistrano plugin.    
require "rvm/capistrano"
set :rvm_ruby_string, '1.9.2'
set :rvm_type, :user  # Don't use system-wide RVM

...

I don't want to have to change the server drastically and I feel that if I remove rvm and install ruby without a version control system it would be better but very disruptive.

Is there a way of fixing this error without change rvm on the server and rbenv on my dev box? If not should I just get rid of rvm and use rbenv on the server?

You need to wrap the rvm code in a test:

if ENV['rvm_path']
  $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
  require "rvm/capistrano"
  set :rvm_ruby_string, '1.9.2'
  set :rvm_type, :user
end

And if you still require RVM for deployin on production:

  • install RVM
  • remove sourcing lines
  • set export rvm_path=/path/to/rvm in ~/.bash_profile

or:

  • clone git://github.com/wayneeseguin/rvm.git
  • set export rvm_path=/path/to/rvm in ~/.bash_profile

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