Ruby on rails 在Capistrano配方中,检测是否安装了Apache,然后停止它
使用Rails 3.2、Capistrano 2,我有以下nginx配方:Ruby on rails 在Capistrano配方中,检测是否安装了Apache,然后停止它,ruby-on-rails,apache,capistrano,Ruby On Rails,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} ap
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的一部分,您注意到我在启动nginx之前停止了Apache,这样就不会有端口冲突。但这只有在安装了Apache时才起作用,如果其他操作系统没有预装Apache,那么此部署方法将抛出错误,试图停止不存在的Apache
如何改进此脚本?谢谢。您可以将命令更改为
run "#{sudo} pkill -9 apache"
如果您正在使用任何监视工具,如monit
或god
,则他们可能会再次尝试启动apache。在这种情况下,使用
run "#{sudo} netstat -tulpn | grep ':80 ' && /etc/init.d/apache2 stop"
要检查端口80上是否有任何进程(不仅仅是apache)正在侦听,然后发出stop apache(如果有)如果您只是想在找不到apache的情况下忽略错误,可以尝试将该命令替换为
run "#{sudo} /etc/init.d/apache2 stop || true"