【GCP】GAEでRailsのステージング環境と本番環境を構築する方法

Google App EngineでRailsのステージング環境と本番環境を構築する方法を紹介します。

database.ymlの編集

ステージング環境用と本番環境用のDBをそれぞれ追加します。

・database.yml

 

app.yamlの編集

GAEにデプロイするステージング環境と本番環境のapp.yamlファイルを作成します。

今回はGAEのスタンダード環境で構築しています。「RAILS_ENV=」で環境を指定します。

また、env_variablesで環境変数を指定することもできます。

・app-staging.yaml

 

・app-production.yaml

 

dispatch.yamlの作成

dispatch.yamlを作成し、ドメインとサービスを紐づけます。これでGAEのサービスにデプロイした際に、指定したURLに割り当てることができます。

・dispatch.yaml

dispatch.yamlが作成できたら、以下のコマンドでデプロイします。

 

Railsプロジェクトをステージング環境と本番環境にそれぞれデプロイ

ここまで準備が完了したら、実際にRailsプロジェクトをそれぞれの環境にデプロイします。

■ステージング環境

デプロイする前にRailsアセットをコンパイルします。

app-staging.yamlを指定してデプロイします。

 

■本番環境

ステージング環境と同様、デプロイする前にコンパイルします。

app-production.yamlを指定してデプロイします。

デプロイする際に、target serviceがそれぞれの環境が選択できているか確認しておきましょう。

 

マイグレーション・シードの実行

マイグレーションとシードもそれぞれの環境に合わせて行いますappengineを使ってマイグレーションを実行します。

シード処理は時間がかかることがあるので、デフォルトの10分を30分まで伸ばしています。

■ステージング環境

マイグレーション処理

シード処理

 

■本番環境

マイグレーション処理

シード処理

 

① ハマりポイント「Errno::EROFS: Read-only file system @ rb_sysopen – /srv/db/schema.rb」

追加のマイグレーションファイルを作成し、実行するときにエラー発生。schema.rbが読み取り専用のため(スタンダード環境だから?)、実行できずにハマる。。

 

解決策として、作成したマイグレーションファイルのバージョンを指定することで実行できました。

 

②ハマりポイント「Cannot run migrations because another migration process is currently running.」

マイグレーション対象のDBに接続した状態で、実行するとエラー発生。

 

DBにログインし、以下のコマンドで処理中のプロセスの一覧を表示し、該当のプロセスを終了させて再度実行すれば通ります。

 

以上、GAEでRailsのステージング環境と本番環境を構築する方法を紹介しました。