RailsアプリのデプロイにCapistranoを使っているのですが、前に使っていたデプロイスクリプトをコピーしてきたらpassengerの再起動ができませんでした。
どうやらpassengerの再起動方法がバージョンアップで変わったようです。
環境
CentOS6.5、Apache2.2、PhusionPassenger 5.0、Rails4.2
これまでのPassenger再起動
Passenger4.0の再起動方法は以下のとおり。
#config/deploy.rb … desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do # restart.txtという空ファイルを作るとpassengerが再起動してくれる execute :touch, "#{fetch :current_path}/tmp/restart.txt" end end
新しいPassengerの再起動方法
新しい再起動は"passenger-config restart-app"というコマンドで実行するようです。
Passenger の再起動コマンドがいつの間にか変わっていた件について
コマンドラインから試しに実行してみると謎のメッセージが・・・
$ ~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-5.0.26/bin/passenger-config restart-app *** ERROR: Phusion Passenger doesn't seem to be running. If you are sure that it is running, then the causes of this problem could be one of: 1. You customized the instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir command line argument. If so, please set the environment variable PASSENGER_INSTANCE_REGISTRY_DIR to that directory and run this command again. 2. The instance directory has been removed by an operating system background service. Please set a different instance registry directory using Apache's PassengerInstanceRegistryDir option, Nginx's passenger_instance_registry_dir option, or Phusion Passenger Standalone's --instance-registry-dir command line argument.
メッセージを見る限りでは、Apacheでは"PassengerInstanceRegistryDir"ディレクティブに任意のディレクトリパスを設定する必要があるようです。
#/etc/httpd/conf/httpd.conf
…
PassengerInstanceRegistry /var/run/passenger-instreg
ディレクトリを作って
mkdir /var/run/passenger-instreg
さらに環境変数"PASSENGER_INSTANCE_REGISTRY_DIR"の設定も必要となります。
export PASSENGER_INSTANCE_REGISTRY_DIR=/var/run/passenger-instreg
こちらのサイトで詳しく説明されています。
CentOS7でpassenger-configやpassenger-statusがエラーになる | Pistolfly
ここまで来れば動くはず。
と思って実行すると、対話モードで選択するアプリを選ぶコンソールが表示されました。
$ ~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-5.0.26/bin/passenger-config restart-app Please select the application to restart. Tip: re-run this command with --help to learn how to automate it. If the menu doesn't display correctly, press '!' > /var/www/project/fc2search/current Cancel Restarting /var/www/project/fc2search/current
Enterすれば再起動は実行されるようなんですが、スクリプトできちんと動くのか心配なのでコマンドのオプションを見てみます。
$ ~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-5.0.26/bin/passenger-config restart-app --help Usage 1: passenger-config restart-app <APP PATH PREFIX> [OPTIONS] Usage 2: passenger-config restart-app . [OPTIONS] Usage 3: passenger-config restart-app --name <APP GROUP NAME> [OPTIONS] … Options: --name APP_GROUP_NAME The app group name to select --rolling-restart Perform a rolling restart instead of a regular restart (Enterprise only). The default is a blocking restart --ignore-app-not-running Exit successfully if the specified application is not currently running. The default is to exit with an error --ignore-passenger-not-running Exit successfully if Phusion Passenger is not currently running. The default is to exit with an error --instance NAME The Phusion Passenger instance to select -h, --help Show this help
"--name"オプションで再起動するアプリを直接指定できるようです。
$ ~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-5.0.26/bin/passenger-config restart-app --name /var/www/project/fc2search/current Restarting /var/www/project/fc2search/current
サイレントに再起動できました。
あとはこれをdepory.rb上に定義するだけです。
#config/deploy.rb … desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do # passenger-configによる再起動 execute "passenger-config", "restart-app --name #{fetch :deploy_to}/current" end end
チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)
- 作者: 池田尚史,藤倉和明,井上史彰
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る
- 作者: Ezra Zygmuntowicz,Bruce A. Tate,Clinton Begin,前田修吾(監訳),橋本将(監訳),小倉正充(監訳),牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/03/16
- メディア: 大型本
- 購入: 25人 クリック: 209回
- この商品を含むブログ (31件) を見る
- 作者: 黒田努
- 出版社/メーカー: インプレス
- 発売日: 2013/03/22
- メディア: Kindle版
- この商品を含むブログを見る