导轨 - Nginx的需要与Capistrano的部署后重新启动?(Rails - Nginx n

2019-07-30 23:37发布

我使用Capistrano的部署我的Rails应用程序。 每当我部署,更改将不会在浏览器上体现出来,而我还需要重新启动nginx的更新网站(运行sudo的/etc/init.d/nginx重启)。 我真的不知道为什么,但它不是应该重新启动应用程序后更新? (使用触摸/app/tmp/restart.txt)

这里是我的deploy.rb

require "rvm/capistrano"
set :rvm_ruby_string, 'ruby-1.9.3-p194@app_name'
set :rvm_type, :user

require "bundler/capistrano"

set :application, "app_name"
set :user, "me"

set :deploy_to, "/home/#{user}/#{application}"
set :deploy_via, :copy

set :use_sudo, false

set :scm, :git
set :repository,  "~/Sites/#{application}/.git"
set :branch, "master"

role :web, '1.2.3.4'
role :app, '1.2.3.4'
role :db,  '1.2.3.4', :primary => true
role :db,  '1.2.3.4'

namespace :deploy do
 task :start do ; end
 task :stop do ; end
 task :restart, :roles => :app, :except => { :no_release => true } do
   run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
 end
end

Answer 1:

我意识到,部署设置一致http://coding.smashingmagazine.com/2011/06/28/setup-a-ubuntu-vps-for-hosting-ruby-on-rails-applications-2/

当我跟着这个教程(约一年前),我安装了nginx的和乘客的小幅更新的版本。 从我记得,我认为这些新版本促使我使用nginx的作为一种服务,当我跑的任何类型的init.d命令。 (Ubuntu的10.04)

反正我会切换出码

run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"

run "#{sudo} service nginx #{command}"

而其是否正常工作。



Answer 2:

你不应该需要重新启动或重新加载nginx的。 刚刚接触TMP / restart.txt应该足以告诉乘客重新加载应用程序。

如果您使用的是最近的Capistrano的版本,你甚至可以丢弃整个“命名空间:部署”的一部分。 Capistrano的成功部署后,已经触及TMP / restart.txt。



Answer 3:

也许问题是,你究竟是如何开始客运。 Capistrano的指向符号链接“当前”的最新版本。 任务

run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"

是使用“当前”放置restart.txt。 但根据http://code.google.com/p/phusion-passenger/issues/detail?id=547 ,乘客被“钉”在“当前”它启动,而任务写入“restart.txt “到目前的‘当前’,可以这么说。 因此,乘客不会“看见”它应该重新启动。

如果你从那里cd'ed给当时的“当前”,并开始客运,它被钉在目录中的“当前”符号链接指向在这一点上并没有遵循符号链接的变化。 所以,你可能需要摆脱的“CD ...... &&乘客开始......”,并直接向乘客的路径。 我延长了部署:启动和部署:停止任务,你在你的recipie也一样说

task :start, :roles => :app, :except => { :no_release => true } do
  run "passenger start #{current_path} -a 127.0.0.1 -p 3000 -e production -d"
end
task :stop, :roles => :app, :except => { :no_release => true } do
  run "passenger stop #{current_path} -p 3000"
end


文章来源: Rails - Nginx needs to be restarted after deploying with Capistrano?