Come posso evitare che le variabili default_environment da sempre impostato dall'azione sudo di Capistrano?

StackOverflow https://stackoverflow.com/questions/2458513

Domanda

Il mio deploy.rb imposta alcune variabili d'ambiente per usare Rubino locale dell'utente regolare, piuttosto che quella a livello di sistema.

set :default_environment, {
  :PATH => '/home/myapp/.rvm/bin:/home/myapp/.rvm/bin:/home/myapp/.rvm/rubies/ruby-1.9.1-p378/bin:/home/myapp/.rvm/gems/ruby-1.9.1-p378/bin:/home/myapp/.rvm/gems/ruby-1.9.1-p378%global/bin:/home/myapp/bin:/usr/bin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin:/usr/games',
  :RUBY_VERSION => 'ruby-1.9.1-p378',
  :GEM_HOME => '/home/myapp/.rvm/gems/ruby-1.9.1-p378',
  :GEM_PATH => '/home/myapp/.rvm/gems/ruby-1.9.1-p378:/home/myapp/.rvm/gems/ruby-1.9.1-p378%global'
}

Naturalmente, quando un'attività è usando sudo, mi sarei aspettato il rubino a livello di sistema per essere usato al posto. Ma sembra le variabili d'ambiente vengono impostate in ogni caso, che è ovviamente valida per l'utente root e restituisce un errore:

executing "sudo -p 'sudo password: ' /etc/init.d/god stop"
    servers: ["myapp.com"]
    [myapp.com] executing command
    command finished
failed: "env PATH=/home/myapp/.rvm/bin:/home/myapp/.rvm/bin:/home/myapp/.rvm/rubies/ruby-1.9.1-p378/bin:/home/myapp/.rvm/gems/ruby-1.9.1-p378/bin:/home/myapp/.rvm/gems/ruby-1.9.1-p378%global/bin:/home/myapp/bin:/usr/bin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin:/usr/games RUBY_VERSION=ruby-1.9.1-p378 GEM_HOME=/home/myapp/.rvm/gems/ruby-1.9.1-p378 GEM_PATH=/home/myapp/.rvm/gems/ruby-1.9.1-p378:/home/myapp/.rvm/gems/ruby-1.9.1-p378%global sh -c 'sudo -p '\\''sudo password: '\\'' /etc/init.d/god stop'" on myapp.com

Non fa alcuna differenza se io uso di Capistrano sudo "chiamata di sistema" o il normale run "chiamata di sistema sudo" .

Come posso evitare questo?

È stato utile?

Soluzione

Un modo semplice potrebbe essere quella di prendere questo out-of-band, a causa delle connessioni modo in cui (non sono) riciclato a Capistrano, variabili ambientali come questo non sono limitati a una singola chiamata (come ci si aspetterebbe!)

Suggerisco di fare una connessione out-of-band con Net :: SSH vaniglia ( http://net-ssh.rubyforge.org/ssh/v2/api/index.html ), questo potrebbe essere semplice come:

Net::SSH.start('host', 'user', :password => "password") do |ssh| 
  ssh.exec!("my-task-here")
end

Solo un pensiero!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top