laravel開発、作成したアプリをデプロイして本番環境で動作させる【4】本番環境でデータベースを扱う
デプロイして本番環境でアプリを動作させるシリーズの続きです。
ローカルでのBD変更は完了したので、いよいよ本番環境でDBを扱えるようにします。
今回の目的
DBを本番環境で扱えるようにする
なぜやるか
本番環境アプリを動作させる為に必須なDBを設置する為
やりたいこと
ローカル環境と本番環境で扱うDBを分ける
本番環境でDBが扱える状態にする
DBを実際に扱えるようにする
やったこと
Herokuで既にデプロイしていた別のアプリで設定状態を確認する
ローカルと本番環境のDB設定を行う
本番環境の環境変数を設定する
テーブルを作成し、実際にDBが扱えているか確認する
実施内容
本番環境の設定を確認
改めて既にHerokuを利用して本番環境で動作させているRailsアプリで設定内容を確認しました。
このアプリではPostgreSQLが扱われていました。
そして、今回のLaravelアプリも本番環境PostgreSQLを設定し動作させることにしました。
アプリ全体の環境設定をする
Laravelでの環境設定切替方法についてはこちらを参考にさせて頂きました、ありがとうございます。
コンフィグで設定変更を実施する
envヘルパーへの理解がなかった為に、DB設定がどうされていたのかが分かっていないのがよく分かりました。
# config/app.php
'env' => env('APP_ENV', 'production'),
環境変数のAPP_ENVに値があればそれを代入、記載がない場合はproductionになるという設定です。
ローカル環境変数はここでローカル設定をいれていました。
# .env
APP_ENV=local
ですので、この設定のまま本番環境では環境変数んみAPP_ENVを指定しなくてもproductionが入ることになります。
DB設定も改めて確認
# config/database.php
'default' => env('DB_CONNECTION', 'mysql'),
考え方が分かれば分かりますね。こちらも環境変数に値があれば、そちらを適用。そうでなければ第2引数のMySQLが使われる。
ローカル環境は環境変数にMySQLを設定しているので、本番環境の設定については、本番環境の環境変数を変えるか'mysql'の記載を変更すればいいことになります。
今回の本番環境はここを'pgsql'に変更することにしました。
実際に本番環境の変更を行い、反映する
設定変更についてはこちらを参考にさせて頂きました、ありがとうございます。
本番環境の環境設定をする為、herokuコマンドにて設定を実施
$ heroku config:set DB_CONNECTION=pgsql
$ heroku config:set DB_HOST=xxxxxxxxxxxxxxxxxxxxx
$ heroku config:set DB_DATABASE=xxxxxxxxxxxx
$ heroku config:set DB_USERNAME=xxxxxxxxxxxxxxxx
$ heroku config:set DB_PASSWORD=xxxxxxxxxxxxxxxxxx
$ heroku config:set DB_PORT=5432
設定後、heroku上にpostgreSQLを作成
$ heroku addons:create heroku-postgresql:hobby-dev
これでようやく本番環境にDBが作成されました。
本番環境テーブル作成を行い、動作確認をする
そして、本番環境にマイグレーションファイルからテーブル設定を実施しました。
マイグレーションファイルの読み込みコマンドを実行します。
$ heroku run php artisan migrate
テーブル作成ができました。
ログインしてみる
テーブル設定が完了したので、実際にログインできることを確認し、DBが扱えていることを確認して、DBが動作していることの完了です。
ここはDBがきっちり出来ていましたので、すんなりログイン完了。
結局、ローカルでしっかり動いていたのでDBさえきっちり用意すればよかったようです。
他のテーブルも扱えているか動作チェックする
ログインできたのでbook登録も確認する。
現在作っているアプリは本の情報を登録できるようにして、ゆくゆくは自分の持っている本が管理できればいいという考えて始めたものです。
単純に本の登録を実現するために、タイトルと画像1枚を登録するという物をローカル環境で作っていました。
本番環境のBDが扱えるようになったので、本番環境で登録できるか確認をします。
しかし、ここで次の問題が発生しました。
画像がアップロードされない
DBにレコード登録はされたのですが、画像が表示されませんでした。
これについては調べてみた結果、こちらを参考にさせて頂きました、ありがとうございます。
画像アップロードしてもHerokuでバージョン管理してないファイルは消えてしまうようです。
今度は、この本番環境で画像をアップロードを実施する内容に取り組みます。