2013-07-11 1 views
0

Я использую capistrano для установки nginx среди других сервисов, как описано Райаном Бейтсом в этом Railscasts. Файл nginx.rb, указанный ниже, копируется из исходного кода. Когда процесс установки дойдет до линииКак нажимать 'enter to continue' в автоматической установке с capistrano

* executing "sudo -p 'sudo password: ' add-apt-repository ppa:nginx/stable" 

он бросает предупреждение и просит меня подтвердить, нажав ENTER или управления с, чтобы продолжить. Однако, поскольку это не ручная установка, я не могу нажать Enter для продолжения. Сценарий установки заморожен, ожидая команды, которую я не могу ввести вручную. Есть ли способ изменить файл nginx.rb ниже, чтобы справиться с этим типом ситуации?

 triggering after callbacks for `deploy:install' 
    * 2013-07-11 10:17:36 executing `nginx:install' 
    * executing "sudo -p 'sudo password: ' add-apt-repository ppa:nginx/stable" 
    servers: ["192.XXX.XXX.XXX"] 
    [192.XXX.XXX.XXX] executing command 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] You are about to add the following PPA to your system: 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] Stable version of nginx. 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] The following are no longer updated past 1.2.7, due to PPA build restrictions: 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] * Maverick 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] The following will not be updated past 1.4.1, except for bugfixes which may have been missed: 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] * Lucid 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] * Natty 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] * Oneiric 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] More info: https://launchpad.net/~nginx/+archive/stable 
** [out :: 192.XXX.XXX.XXX] 
** [out :: 192.XXX.XXX.XXX] Press [ENTER] to continue or ctrl-c to cancel adding it 
** [out :: 192.XXX.XXX.XXX] 

nginx.rb

namespace :nginx do 
    desc "Install latest stable release of nginx" 
    task :install, roles: :web do 
    run "#{sudo} add-apt-repository ppa:nginx/stable" 
    run "#{sudo} apt-get -y update" 
    run "#{sudo} apt-get -y install nginx" 
    end 
    after "deploy:install", "nginx:install" 

    desc "Setup nginx configuration for this application" 
    task :setup, roles: :web do 
    template "nginx_unicorn.erb", "/tmp/nginx_conf" 
    run "#{sudo} mv /tmp/nginx_conf /etc/nginx/sites-enabled/#{application}" 
    run "#{sudo} rm -f /etc/nginx/sites-enabled/default" 
    restart 
    end 
    after "deploy:setup", "nginx:setup" 

    %w[start stop restart].each do |command| 
    desc "#{command} nginx" 
    task command, roles: :web do 
     run "#{sudo} service nginx #{command}" 
    end 
    end 
end 

ответ

2

На самом деле, есть решение в комментариях право на то railscast http://railscasts.com/episodes/337-capistrano-recipes?view=comments см Breno Santos Сальгадо вопрос.

Одним из решений, предусмотренных ним

task :install, roles: :web do 
    run "#{sudo} add-apt-repository ppa:nginx/stable",:pty => true do |ch, stream, data| 
    if data =~ /Press.\[ENTER\].to.continue/ 
     #prompt, and then send the response to the remote process 
     ch.send_data(Capistrano::CLI.password_prompt("Press enter to continue:") + "\n") 
    else 
     #use the default handler for all other text 
     Capistrano::Configuration.default_io_proc.call(ch,stream,data) 
    end 
    end 

    run "#{sudo} apt-get -y update" 
    run "#{sudo} apt-get -y install nginx" 
end 

Вы можете найти некоторые рефакторинг способов сделать это там, выбрать то, что подходит вам лучше всего.

+0

Спасибо, я постараюсь это и принять ваш ответ, если он работает – Leahcim

+0

@biomancer любая идея, как использовать это с capistrano 3? – Mohamad

+0

@Mohamad У меня нет опыта работы с capistrano 3, извините. – biomancer

0

Существует более простой способ использования echo.

Capistrano 2

run "echo | #{sudo} add-apt-repository ppa:nginx/stable" 

Capistrano 3

execute 'echo | add-apt-repository ppa:nginx/stable' 
Смежные вопросы