Sudo n’a pas access aux commandes shell lors du déploiement avec Capistrano

Je déploie mon application Rails 3 en utilisant capistrano.

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

Lorsque je me connecte au serveur en tant que deploy, j’ai access à toutes les commandes dont j’ai besoin .ie: bundle, when etc.

Capistrano semble fonctionner comme sudo et quand j’essaie:

sudo whenever 

Je reçois

 sudo: whenever: command not found 

Cela signifie que chaque fois que je tente de déployer, il échoue et recule.

J’ai essayé le réglage: use_sudo à false dans mon fichier deploy.rb mais toujours pas de chance

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

Aucune suggestion?

Voici mon script de déploiement complet au cas où il y aurait quelque chose qui manquait:

 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" 

sur le serveur, which whenever ou whereis whenever vous devriez obtenir le chemin complet de la commande, placez-le dans le script:

 set :whenever_command, "path_to-whenever" 

Ce n’est pas une solution propre mais ça pourrait marcher.


Une autre solution pourrait être la reconfiguration de sudo, aller dans /etc/sudoers et regarder env_keep ajoutant que PATH aurait pu être important, pour garder tout ce qui est important pour l’application, vous pouvez utiliser rvm, intégration capistrano-rvm et placer toutes les variables affichées. rvm info à env_keep, théoriquement ça devrait marcher, faites attention à ne rien gâcher