Использование rvmsudo с Capistrano - PullRequest
4 голосов
/ 09 июня 2011

Я пытаюсь настроить capistrano для легкого развертывания моего приложения rails3. Я довольно новичок в рельсах.

Все работает как надо, за исключением того, что я пытаюсь перезапустить автономный пассажирский сервер.

Я запускаю redmine на том же сервере, поэтому я следовал http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/, чтобы запустить несколько версий ruby ​​/ rails. Это работает нормально, пока я не попытаюсь заставить capistrano перезапустить пассажирский сервер.

Проблема в том, что 'sudo' не пропускает настройки среды (как показано на: sudo изменяет PATH - почему? )

Все работает, если я могу использовать 'rvmsudo' вместо 'sudo', так как rvmsudo передает правильную информацию о среде. Но если я использую «rvmsudo» в своем развертывании Captistrano, он зависнет в ожидании моего пароля sudo.

Я хотел бы реализовать try_rvmsudo, который работает точно так же, как try_sudo, где он отправляет пароль, если его просят. но я не могу найти какую-либо информацию о том, как это сделать.

Вот команда перезапуска, которую я пытаюсь использовать:

desc "Restart Passenger server"
task :restart, :roles => :app, :except => { :no_release => true } do
    run <<-CMD
      if [[ -f #{release_path}/tmp/pids/passenger.#{passenger_port}.pid ]];
      then
        cd #{deploy_to}/current && #{passenger_path}passenger stop -p #{passenger_port} --pid-file #{release_path}/tmp/pids/passenger.#{passenger_port}.pid;
      fi
    CMD
    # restart passenger standalone on the specified port/environment and as a daemon
    run "cd #{deploy_to}/current && rvmsudo #{passenger_path}passenger start -e #{rails_env} -p #{passenger_port} -a 127.0.0.1 -d --pid-file #{release_path}\
/tmp/pids/passenger.#{passenger_port}.pid"
  end

И оно висит, говоря:

 ** [out :: snapshotroulette.com] [sudo] password for deployer:

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Ну, я обнаружил, что я могу заставить Capistrano сначала отправить пароль sudo (запустив команду sudo). Sudo запоминает ваш пароль в течение небольшого времени (5 минут по умолчанию). Кроме того, rvmsudo просто вызывает sudo с установленными переменными окружения, поэтому он также запоминает ваш пароль.

Это не очень красиво, но работает:

desc "Restart Passenger server"
task :restart, :roles => :app, :except => { :no_release => true } do
    # Hack to have capistrano enter the sudo password (for rvmsudo later)
    sudo "whoami"
    run <<-CMD
      if [[ -f #{release_path}/tmp/pids/passenger.#{passenger_port}.pid ]];
      then
        cd #{deploy_to}/current && rvmsudo passenger stop;
      fi
    CMD

    # restart passenger standalone on the specified port/environment and as a daemon
    # The sleep 1 is to give the server enough time to spawn. The session was closing before it spawned, so it never actually spawned
    run "cd #{deploy_to}/current && rvmsudo passenger start -e #{rails_env} -p #{passenger_port} -a 127.0.0.1 -d --pid-file #{release_path}/tmp/pids/passeng\
er.#{passenger_port}.pid && sleep 1"
  end

Любые другие решения приветствуются!

0 голосов
/ 29 августа 2012

Кажется, проблема с зависанием capistrano в rvmsudo была исправлена ​​в более поздних версиях rvm.В моей работе 'rvm get stable' на целевых машинах исправлена ​​проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...