/ / У рецепті Capistrano, визначити, чи встановлено Apache, а потім зупиніть його - рубіни на рейках, apache, capistrano

У рецепті Capistrano визначте, чи встановлено Apache, а потім зупиніть його - рубіни на рейках, apache, capistrano

Використовуючи Rails 3.2, Capistrano 2, у мене є наступний рецепт nginx:

namespace :nginx do
desc "Install latest stable release of nginx"
task :install, roles: :web do
run "#{sudo} add-apt-repository -y ppa:nginx/stable"
run "#{sudo} apt-get -y update"
run "#{sudo} apt-get -y install nginx"
run "#{sudo} /etc/init.d/apache2 stop" # Stop Apache because we are using nginx, only for production
start
end
after "deploy:install", "nginx:install"
end

Це частина налаштування мого VPS з нуля, визверніть увагу, що я закриваю Apache, перш ніж nginx буде запущено, так що не буде конфлікту з портом. Але це працює тільки тоді, коли встановлено Apache, якщо є інша ОС, яка не має попереднього встановлення Apache, тоді цей рецепт розгортання викине помилку, намагаючись зупинити Apache, якого не існує.

Як я можу покращити цей сценарій? Дякую.

Відповіді:

0 для відповіді № 1

Якщо ви просто хочете ігнорувати помилку, якщо apache не знайдено, ви можете спробувати замінити команду за допомогою

run "#{sudo} /etc/init.d/apache2 stop || true"

0 для відповіді № 2

Ви можете змінити команду на

run "#{sudo} pkill -9 apache"

У випадку, якщо ви використовуєте будь-який інструмент моніторингу, такий як monit або god, то вони можуть спробувати знову запустити apache. У такому випадку скористайтеся

run "#{sudo} netstat -tulpn | grep ":80 " && /etc/init.d/apache2 stop"

щоб перевірити, чи прослуховує який-небудь процес (а не тільки apache) на порту 80, а потім видає припинення apache, якщо це є