Railsアプリのデプロイの手順
前置き
laravelに引き続きRailsアプリでもデプロイに躓いてしまいました。
例によって自分用のメモとして残しておきます。
前提条件
サーバー:heroku
DB: MySQL
画像の保存先: amazon S3
手順
- heroku上でのアプリの作成
- cleardb addonの導入
- gemの設定
- credentialsファイルとmaseter.keyの設定
- heroku上での環境変数の設定
- 動作環境の設定
- デプロイ
- マイグレーション
- アプリの起動
順番に解説していきます
heroku上でのアプリの作成
ターミナルの作業ディレクトリで
heroku create アプリ名
アプリ名は、ローカルのアプリ名でなくても大丈夫そうです。
cleardb addonの導入
この作業は、herokuでMySQLを使用するためのものです。
なので、DBがMySQLでない場合はスキップして大丈夫です(DBによっては他の作業が発生する可能性はあり)。
heroku addons:add cleardb
gemの設定
今回利用しているMySQLのバージョンがMySQL2なので、heroku上でもそれに合わせて動作するように設定していきます。
heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`
heroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}
一つ目でheroku上のDBのurlをheroku_clearbdという変数に代入し、2行目で環境変数として設定しています。
ミスタイプが怖いので、コピペでいいと思います。
credentialsファイルとmaster.keyの設定
credentialsファイルというのは、外部に公開したくない値を暗号化して保存しておくファイルであり、master.keyはcredentialsファイルの復号化キーです。
まずは、credentialsファイルを作成します。
EDITOR="vi" bin/rails credentials:edit
上記のターミナルコマンドは本来はcredentialsファイル(config/credentials.yml.enc)の編集のためのものです
しかし、ファイル自体が存在しない場合には、上記コマンドによりcredentials.yml.encとmaster.keyが生成されます。
heroku上での環境変数の設定
次に、master.keyを環境変数として設定します。
heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
master.keyはgitで管理されないので、デプロイ後でも参照できるように環境変数化しておく必要があります。
動作環境の指定
次に、アプリを動かすherokuのバージョンを指定します。
heroku stack:set heroku-18 -a アプリ名
このあたりは、開発に使用したrubyのバージョンとherokuのバージョンの整合性次第ですね。
デフォルトのheroku-20で動作するのであればこの手順は不要です。
デプロイ
git push heroku master
マイグレーション
heroku run rails db:migrate
アプリの起動
heroku open
補足
今回のデプロイでいくつかエラーが発生しました。
それらのエラーを解決する上で役立ったターミナルコマンドがあったので、こちらも残しておきます。
Precompiling assets failedの対処
上記のエラーが出た場合には、まず以下のコードを試します。
RAILS_ENV=development bin/rails assets:precompile
開発環境におけるコンパイル処理に問題がないかを確認するコマンドですね。
問題がなければ"nothing is up to date"と出ますが、問題が出れば対処しましょう。
私の場合は"yarnをアップデートしろ"のような文言が出ました。
ターミナルコマンドの形で表示してくれるので、コピペするだけでも大丈夫です。
上記を行った後、以下のコマンドを実行します。
$ RAILS_ENV=production bin/rails assets:precompile
上記のコマンドの本番環境版ですね。
私の場合は、こちらは問題なしでした。
heroku open後にアプリがクラッシュしていると出た時
無事にデプロイ・マイグレーションが完了しても、いざアプリを開くとエラーが出ることがあります。
そんな場合にはheroku logs --tailでログを見ると思うのですが、それだけで情報が不十分な場合にはheroku run consoleコマンドを試しましょう。
文法ミスや環境変数の設定漏れなどの原因を教えてくれます。
とりあえずこんなところで。