#はじめに
最近は初学者でもRailsアプリをAWSのEC2にデプロイする人が増えてきました。
そしてデプロイした後も機能の追加や修正をして更新したい!と思う方は多いかと思います。
しかし自動デプロイを設定するのは大変、いち早く再デプロイしたいと思う方もいるでしょう。
そこで**「手動」デプロイ**する方法を自分自身の体験も含め、初学者向けにまとめておきます。
*複雑な変更を加えた場合はご自身で必要な操作を調べてください。
*コマンドの実行は慎重に!
#この記事の対象者
-
以下のどちらかの記事を参考にし、VPCの作成からEC2にRailsアプリを公開した人
-
自動デプロイの設定をする前にアプリを更新したい人
-
GitやGitHub、環境変数の基本的な使い方や仕組みを理解している人
特にGitやGitHubの基本的な使い方を理解していないと、APIキーを公開してしまったり思わぬコンフリクトが発生してパニックになったり、痛い目に合うかもしれません。
先にGitやGitHubの使い方を学習することを推奨します。
理解を深めるため、最後の「おまけ」に載せた記事も参考にしてみてください。
前提
- 簡単な例としてローカルのmasterブランチを編集し、その後EC2内のmasterブランチを更新する。
- 【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法を参考にデプロイしたRailsアプリを想定 (この記事の続きにあたる部分を意識して執筆します)
環境: MacOS, GitHub, EC2, Nginx, Unicorn
#手順
##1.ローカルで編集し、GitHubにpushする
はじめは練習として背景の色を変える程度で良いかもしれません。
ブランチやプルリクはご自身のルールに沿って適宜変更してください。
APIキーなどを追加したら、環境変数などを用いてGitHubに公開しないよう注意してください!
$ git add . #ご自身の変更に合わせて
$ git commit -m"コミットメッセージ"
$ git push origin master
余談ですが、APIキーなどセキュリティに関わる設定をした後push
した場合、GitHubに登録したメアドにGitGuardianから警告メールが来ていないか確認した方がいいです。
ごく簡単に言えば、GitGuardianはpush
した時リポジトリ内に秘密鍵などが含まれていないかチェックしてくれています。
実はみなさんが普段行っているpush
も裏でGitGuardianが見守ってくれているのですね。
すみません、脱線してしまいました。
##2.EC2にログインする
話を戻して、実際にサーバーへログインしましょう!
$ ssh アプリ名_key_rsa
##3.アプリディレクトリに移動
$ cd /var/www/rails/アプリ名
##4.Unicornのプロセスを停止する
プロセスとは簡単に言えば、実行中のプログラムのことです。
unicorn.pid
のpidはprocess ID
のことで、プロセスの識別子にあたります。
なのでcat tmp/pids/unicorn.pid
を実行すると、25902のような番号が表示されます。
ちなみにproduction環境はキャッシュによって即座に変更が反映されません。
Rails のキャッシュ機構
キャッシュは、デフォルトではproduction環境でのみ有効になります。
そこでpull
する前にUnicornのプロセスを停止しておきます。
このコマンドを実行したら再起動させるまではサイトにアクセスできなくなるため、注意してください。
$ kill -QUIT `cat tmp/pids/unicorn.pid`
##5.アプリの変更を取り込む
2通りやり方があるのですが、後者の方が事故りにくいです。
pull
で一気に変更を取り込む場合はこっち
$ git pull origin master
pull
より慎重に取り込みたい場合はこっち
$ git branch #masterブランチにいることを確認
$ git fetch
$ git diff origin/master #変更した差分を確認
$ git merge origin/master
仮にコンフリクトが起きても慌てず解消しましょう。
##6.必要に応じてコマンドを打つ
変更した内容に応じて適宜コマンドを実行しましょう。
###bundle install
$ bundle install
###rails c
$ bundle exec rails c -e production
###migrate
$ rake db:migrate RAILS_ENV=production #本番環境でmigrate
本番環境なのでRAILS_ENV=production
の部分を忘れずに!
ここで紹介したコマンドは一例なので、必要があらばご自身で調べてください。
##7.プリコンパイルする
アセット(JavascriptやCSS、画像)をプリコンパイル(それらの連結・圧縮など)します。
画像がうまく表示されない場合や色の変更が反映されない場合は、プリコンパイルできていない可能性があります。
アセットパイプラインやプリコンパイルについて詳しく知りたい方はこちら
$ bundle exec rake assets:precompile RAILS_ENV=production
##8.Unicornの起動
最後にUnicornを起動させましょう。
$ unicorn_rails -c /var/www/rails/アプリ名/config/unicorn.conf.rb -D -E production
##9.動作確認!
アプリのURLにアクセスし、再読み込みしてみましょう。
変更が反映されていたら成功です!
#最後に
私自身経験が浅いため、説明不足や誤った点があるかもしれません。
記事は随時アップデートしていきたいと思います。
お疲れ様でした!
#参考
-
「アセットパイプライン」を学ぼう
#おまけ
役に立ちそうな記事を載せときます。 -
UnicornやNginx、Rackについて詳しく知る
なぜrailsの本番環境ではUnicorn,Nginxを使うのか? ~ Rack,Unicorn,Nginxの連携について ~【Ruby On Railsでwebサービス運営】
-
Gitコマンド集
基本的なGitコマンドまとめ -
Git入門
サル先生のGit入門 -
デプロイでエラーが発生した時に使えそうなコマンド
【AWSとか】デプロイ時のエラー出たときに使いそうなコマンド集 -
RailsアプリをAWSにデプロイして独自ドメイン&SSL化まで
【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法【その1〜ネットワーク,RDS環境設定編〜】