10

Rails アプリケーションをデプロイするために Capistrano を使用しています。デプロイするたびに、変更がブラウザーに反映されず、nginx を再起動してサイトを更新する必要があります (sudo /etc/init.d/nginx restart を実行します)。なぜだかよくわかりませんが、アプリケーションを再起動した後に更新されるはずではありませんか? ( touch /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
4

3 に答える 3

5

nginx を再起動またはリロードする必要はありません。tmp/restart.txt に触れるだけで、パッセンジャーにアプリをリロードするように指示できます。

最近のバージョンの capistrano を使用している場合は、「namespace :deploy」部分全体を削除することもできます。デプロイが成功した後、Capistrano はすでに tmp/restart.txt にアクセスしています。

于 2012-08-14T18:15:28.087 に答える
3

デプロイメントのセットアップがhttp://coding.smashingmagazine.com/2011/06/28/setup-a-ubuntu-vps-for-hosting-ruby-on-rails-applications-2/と一致していることに気付きました

このチュートリアル(約1年前)に従ったとき、少し新しいバージョンのnginxとpassengerをインストールしました。私が覚えていることから、これらの新しいバージョンは、私が任意のタイプのinit.dコマンドを実行したときに、サービスとしてnginxを使用するように促したと思います。(Ubuntu 10.04)

とにかく私はコードを切り替えるでしょう

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

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

そして、それが機能するかどうかを確認します。

于 2012-08-13T18:26:29.163 に答える
1

問題は、Passenger をどのように正確に開始したかにあるのかもしれません。Capistrano は、シンボリック リンク 'current' を最新のリリースに向けます。タスク

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

その「現在」を使用してrestart.txtを配置しています。しかしhttp://code.google.com/p/phusion-passenger/issues/detail?id=547によると、Passenger は開始された「現在」に「固定」され、タスクは「restart.txt」を書き込みますいわば現在の「現在」へ。そのため、Passenger は再起動する必要があることを「認識」しません。

当時の 'current' に cd し、そこから Passenger を起動すると、その時点で 'current' のシンボリック リンクが指すディレクトリに固定され、シンボリック リンクの変更には従いません。そのため、'cd ... && Passenger start...' を削除して Passenger へのパスを直接指定する必要がある場合があります。レシピにある deploy:start および deploy:stop タスクも拡張しました。

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
于 2013-01-18T12:14:06.200 に答える