我使用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
我意识到,部署设置一致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}"
而其是否正常工作。
你不应该需要重新启动或重新加载nginx的。 刚刚接触TMP / restart.txt应该足以告诉乘客重新加载应用程序。
如果您使用的是最近的Capistrano的版本,你甚至可以丢弃整个“命名空间:部署”的一部分。 Capistrano的成功部署后,已经触及TMP / restart.txt。
也许问题是,你究竟是如何开始客运。 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