ローカルで Rails アプリを production モードで起動する

はじめに

PomoRoad というポモドーロテクニックのためのWebアプリケーションを作っています。
Heroku にデプロイする前に、手元で production モードで起動しました。
せっかくなので、手順を整理しようと思います。

ちなみに、サーバーにデプロイする前に、手元で productionモードで動かしてみて、
エラーは潰しておくのがコツだと思っています。

バージョン

Ruby : 2.4.2
Rails : 5.1.4
React : 16.2.0
Redux : 3.7.2
Webpacker : 3.3.1
Heroku CLI : heroku-cli/6.15.35-cf39a29 (darwin-x64) node-v9.8.0

(Webpacker 使って Rails のレールに乗せてフロントエンドも開発している?という感じですが、バージョン情報はこんなもので良いのだろうか・・・)

手順

SECRET_KEY_BASE を設定する

bin/rails secret で出力された値を、環境変数 SECRET_KEY_BASE に設定する。
私は dotenv-rails gem を使用しているので、 .env に設定する。
dotenv-rails を使用していない場合 export とかで設定すれば良いはず。

.env
SECRET_KEY_BASE= xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

参考

アセットプリコンパイル

$ RAILS_ENV=production bundle exec rails assets:precompile

ここで、実は複数回エラーになりました。詳細は以下をご覧ください。

DBのセットアップ

production 用の DB とユーザーを作成する

$ bin/rails db
mysql> create user 'your_user'@'localhost' IDENTIFIED BY 'your_password';
mysql> select User,Host from mysql.user;
+----------------+-----------+
| User           | Host      |
+----------------+-----------+
| mysql.sys      | localhost |
| your_user      | localhost |
| root           | localhost |
+----------------+-----------+
3 rows in set (0.00 sec)

### 権限設定
mysql> create database `your_database`;
mysql> use your_database;
mysql> grant all on * to 'your_database'@'localhost';
mysql> show grants for 'your_database'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for elm-asp-manager@localhost                                                                           |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'pomodoro-rails'@'localhost'                                                            |
| GRANT ALL PRIVILEGES ON `pomodoro-rails_production`.* TO 'pomodoro-rails'@'localhost'                        |
+----------------------------------------------------------------------------------------------------------------+
mysql> exit

database.yml の設定

先ほど作成したproduction用のDBユーザー・パスワードを database.yml に設定する。
database.yml.sample などを作成しておき、 database.yml.gitignore しておくと良い。

DBマイグレーション

$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production bundle exec db:seed # seedデータがない場合は不要

サーバーを production モードで起動する

$ bundle exec rails s -e production

エラーなくアクセスできればOK!!

おわりに

PomoRoad というWebアプリですが、もう少し作り込んだらベータ版として公開して、改善を続けていこうと思っています。
ご興味ある方は、 @mokuo_ で情報は呟いていくと思いますので、よろしくお願いいたします。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.