今回は、Amazon Linux(AWS)のEC2へ、Capistrano3で、自動デプロイ実行後に、Pumaを再起動するタスクを追加したいと思います。
ではでは、早速、「Rails4+Capistrano3+pumaで、自動デプロイをしよう!」で設定した、config/deploy.rbに、Pumaを再起動するタスクを追加していきます。
【目 次】
1.config/deploy.rbに、タスクを追加
config/deploy.rbに下記のように、タスクを追加します。
# config valid only for current version of Capistrano
lock '3.4.0'
set :application, ‘アプリケーション名'
set :repo_url, ‘GitHubのリポジトリURL'
set :deploy_to, “デプロイ先のパス"
set :rbenv_custom_path, '/opt/rbenv'
set :rbenv_ruby, '2.2.3'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w{rake gem bundle ruby}
set :file_permissions_paths, [ 'tmp' ]
set :file_permissions_groups, [ 'www' ]
set :file_permissions_chmod_mode, '0770'
after 'deploy:publishing', 'deploy:restart'
after 'deploy:finishing', 'deploy:cleanup'
namespace :deploy do
after :restart, :clear_cache do
on roles(:app), in: :groups, limit: 3, wait: 10 do
invoke 'server:restart_puma'
end
end
end
2.タスクのスクリプトを作成
今回は、lib/capistrano/tasks/restart-puma-pgnyumon.rakeとして、新規作成を行いました。
スクリプトの内容は、こんな感じ。
namespace :server do
desc "Restart puma"
task :restart_puma do
on roles(:all) do
execute "sudo /sbin/service puma-pgnyumon restart"
end
end
end
3.Capistranoで自動デプロイを実行
では、下準備は整ったと思われるので、Capistranoからデプロイを実行してみます!
$ bundle exec cap production deploy
INFO [657520c7] Running /usr/bin/env mkdir -p /tmp/pgnyumon/ as deploy@pgnyumon.com
DEBUG [657520c7] Command: /usr/bin/env mkdir -p /tmp/pgnyumon/
・・・途中省略
INFO [77235a4b] Running /usr/bin/env sudo /sbin/service puma-pgnyumon restart as deploy@pgnyumon.com
DEBUG [77235a4b] Command: sudo /sbin/service puma-pgnyumon restart
DEBUG [77235a4b] sudo
DEBUG [77235a4b] :
DEBUG [77235a4b] sudo を実行するには tty がなければいけません。すみません
DEBUG [77235a4b]
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as deploy@pgnyumon.com: Exception while executing as deploy@pgnyumon.com: sudo /sbin/service puma-pgnyumon restart exit status: 1
sudo /sbin/service puma-pgnyumon restart stdout: Nothing written
sudo /sbin/service puma-pgnyumon restart stderr: sudo: sudo を実行するには tty がなければいけません。すみません
SSHKit::Runner::ExecuteError: Exception while executing as deploy@pgnyumon.com: sudo /sbin/service puma-pgnyumon restart exit status: 1
sudo /sbin/service puma-pgnyumon restart stdout: Nothing written
sudo /sbin/service puma-pgnyumon restart stderr: sudo: sudo を実行するには tty がなければいけません。すみません
SSHKit::Command::Failed: sudo /sbin/service puma-pgnyumon restart exit status: 1
sudo /sbin/service puma-pgnyumon restart stdout: Nothing written
sudo /sbin/service puma-pgnyumon restart stderr: sudo: sudo を実行するには tty がなければいけません。すみません
/Users/kana/ticklecode/pgnyumon/lib/capistrano/tasks/restart-puma-pgnyumon.rake:5:in `block (3 levels) in <top (required)>'
Tasks: TOP => deploy:clear_cache
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as deploy@pgnyumon.com: Exception while executing as deploy@pgnyumon.com: sudo /sbin/service puma-pgnyumon restart exit status: 1
sudo /sbin/service puma-pgnyumon restart stdout: Nothing written
sudo /sbin/service puma-pgnyumon restart stderr: sudo: sudo を実行するには tty がなければいけません。すみません
すごく、あやまられました(^^A;
sudoを実行するには、ttyが必要みたいです。
Capistrano3の場合は、config/deploy.rbに下記を追記すればOKでした。
set :pty, true
ちなみに、Capistrano2の記述方法は、こちらだそうです。
default_run_options[:pty] = true
さらに、ちなみにエラーメッセージでググると、下記のように、visudoコマンドを利用してコメントアウトする方法もヒットするのですが、「set :pty, true」を追記する方が、セキュリティ的にも良さそうです。
Defaults requiter
↓
#Defaults requiter
そして、満を持して、再度、Capistranoから自動デプロイを試みますが、
[0cb8d7d6] [sudo] password for deploy:
この状態のまま、実行が止まってしまいました。。。う〜ん、これだけでいけるように思うのですが、しかたないです。
なので、visudoコマンドを実行して、sudo権限の設定を変更します。
sudo visudo
Capistranoからは、deployアカウントで接続して実行しているので、serviceのリスタートコマンドを、パスワードなしで実行できるように、下記のように追記してみました。
deploy ALL=(ALL) ALL, NOPASSWD:/sbin/service puma-pgnyumon restart
再度、capコマンドを実行して、自動デプロイにトライしてみます。
$ bundle exec cap production deploy
INFO [6820686e] Running /usr/bin/env mkdir -p /tmp/pgnyumon/ as deploy@pgnyumon.com
DEBUG [6820686e] Command: /usr/bin/env mkdir -p /tmp/pgnyumon/
・・・途中省略
INFO [eb477ff7] Running /usr/bin/env sudo /sbin/service puma-pgnyumon restart as deploy@pgnyumon.com
DEBUG [eb477ff7] Command: sudo /sbin/service puma-pgnyumon restart
DEBUG [eb477ff7] Hot-restarting puma...
DEBUG [eb477ff7] Doublechecking the process restart...
DEBUG [eb477ff7] No puma process found
DEBUG [eb477ff7] Puma restart failed :/
DEBUG [eb477ff7] Trying cold reboot
DEBUG [eb477ff7] Puma starting in single mode...
DEBUG [eb477ff7]
DEBUG [eb477ff7] * Version 2.14.0 (ruby 2.2.3-p173), codename: Fuchsia Friday
DEBUG [eb477ff7]
DEBUG [eb477ff7] * Min threads: 0, max threads: 16
DEBUG [eb477ff7]
DEBUG [eb477ff7] * Environment: production
DEBUG [eb477ff7]
DEBUG [eb477ff7] * Daemonizing...
DEBUG [eb477ff7]
DEBUG [eb477ff7] [ OK ]
Pumaの再起動ができました!!
ちょっと、もやっと残る感じもありますが、、、ひとまず、良しとしたいと思います。
今回は、ここまで!!
前回の記事は、「Railsアプリケーションのトップ画面を作成しよう!」
AWS が学べるオンライン講座
オンライン講座なら、好きな場所で好きな時間に学習できます。AWS も学ぶことができるので、ぜひ、活用しましょう。
Udemy(ユーデミー)
オンライン動画学習サイトで、AWS講座もあります。頻繁に講座のバーゲンセールスが実施されているので、価格をチェックしましょう!購入した動画は繰り返し使えますので何度でも学習可!
世界最大級のオンライン学習サイトUdemy
RaiseTech(ライズテック)
RaiseTechは最速で「稼げる」エンジニアになるための、実践的なWebエンジニアリングスクール。AWSフルコース、AWS自動化コースとAWS講座が充実!
【RaiseTech】最速で稼げるプロになるエンジニアリングスクール