2011-02-15 2 views
3

Je déploie mon application Rails 3 en utilisant capistrano.Sudo n'a pas accès aux commandes shell lors du déploiement avec Capistrano

J'ai sur l'utilisateur (déploiement) qui a été ajouté à sudoers. C'est l'utilisateur avec lequel je déploie.

Lorsque je me connecte au serveur que je Déployez avoir accès à toutes les commandes de pierres précieuses dont j'ai besoin .ie: bundle, chaque fois, etc.

Capistrano semble fonctionner comme si sudo, et lorsque je tente:

sudo whenever 

Je reçois

sudo: whenever: command not found 

Cela signifie que chaque fois que j'essaie de déployer, il échoue et annule.

J'ai essayé d'installer: use_sudo false dans mon fichier deploy.rb mais toujours pas de chance

set :user, "deploy" 
set :runner, user 
set :use_sudo, false 

Toutes les suggestions?

Voici mon script de déploiement complet dans le cas où il y a quelque chose là-bas que je l'ai manqué:

require 'config/boot' 
require 'hoptoad_notifier/capistrano' 
require 'capistrano/ext/multistage' 
require "whenever/capistrano" 
# 
set :whenever_command, "bundle exec whenever" 

set :application, "MYAPP" 
set :repository, "[email protected]:myAccount/myRepos.git" 

# only keep 3 previous releases after cleanup 
set :keep_releases, 3 

set :scm, "git" 
set :scm_user, "me" 
set :branch, lambda {rails_env} 
set :deploy_to, lambda {"/var/www/#{application}/#{rails_env}"} 


default_run_options[:pty] = true 

role :web, "xxx.xxx.xxx.xxx"       # Your HTTP server, Apache/etc 
role :app, "xxx.xxx.xxx.xxx"       # This may be the same as your `Web` server 
role :db, "xxx.xxx.xxx.xxx", :primary => true  # This is where Rails migrations will run 

set :user, "deploy" 
set :runner, user 
set :use_sudo, false 

ssh_options[:paranoid] = false 
ssh_options[:port] = 22 

namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app do 
    run " touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 

end 

namespace :bundle do 

    desc "run bundle install" 
    task :install do 
    run "cd #{current_release} && bundle install" 
    end 

end 

namespace :tail do 

    desc "Tail the current environment's log file" 
    task :log, :roles => :app do 
    stream "tail -f #{shared_path}/log/#{rails_env}.log" 
    end 

    desc "Tail the new relic log file" 
    task :new_relic, :roles => :app do 
    stream "tail -f #{shared_path}/log/new_relic.log" 
    end 

end 


before "deploy:restart", "bundle:install" 
after "deploy:restart", "deploy:cleanup" 
after "deploy:restart", "whenever:update_crontab" 
+0

Je dois ajouter que j'utilise plusieurs étapes Capistrano donc la variable RAILS_ENV est situé dans /deploy/staging.rb – bodacious

+1

Gavin, s'il vous plaît ajouter l'erreur et stacktrace que vous obtenez? Ce – Augusto

+0

est la partie pertinente: ** [out :: xxx.xxx.xxx.xxx] sh: chaque fois: Introuvable commande terminé *** [déployer: update_code] * reculer exécution « rm - rf/var/www/mysite/staging/releases/20110215174217; true " serveurs: [" xxx.xxx.xxx.xxx "] [xxx.xxx.xxx.xxx] commande d'exécution commande terminée Echec:" sh -c 'cd/var/www/mysite/staging/releases/20110215174217 && chaque fois --clear-crontab mysite' "on xxx.xxx.xxx.xxx – bodacious

Répondre

4

sur l'exécution du serveur which whenever ou whereis whenever vous devriez obtenir le chemin complet à la commande le mettre dans le script:

set :whenever_command, "path_to-whenever" 

Cette solution n'est pas propre mais peut fonctionner.


Une autre solution pourrait être reconfiguration sudo, aller à /etc/sudoers et un coup d'oeil sur env_keep ajoutant PATH aurait été important, de garder toutes les choses importantes pour l'application, vous pouvez utiliser RVM, l'intégration Capistrano-RVM et mettre tous les variables affichées de rvm info à env_keep, theoreticaly il devrait fonctionner, juste faire attention à ne pas casser quoi que ce soit

+0

C'est une solution de contournement rapide pour la commande de moment, mais elle ne corrige pas les autres commandes gem Est-ce que sudo _cmd_ utilise un chemin différent de _cmd_? – bodacious

+0

ajouté note sur sudo – mpapis

+0

RVM était un point dans la bonne direction ... Maintenant, j'ai également installé RVM sur mon serveur et j'utilise un gemset pour mon application spécifique. ree @ myapp Fonctionne un régal maintenant que les exécutables gem sont maintenant disponibles pour mon utilisateur de déploiement – bodacious

Questions connexes