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