Google App EngineのRuby 2.5 StandardでRails環境構築

Google App EngineのRuby 2.5 StandardでRails環境構築する方法とCloud SQLのMySQLとの接続方法について紹介します。

基本的には以下の公式を参考に環境構築しています。

前提条件

デプロイするRailsプロジェクトが以下に当てはまっていることが前提条件です。

  • Ruby バージョン2.3.4以降をインストール
  • Rails 5 gem をインストール
  • Bundler gem をインストール

 

必要なAPIを有効化

データストア、Pub / Sub、Cloud Storage JSON、Stackdriver Logging、およびGoogle+必要なAPIを有効にします。

 

app.yamlの作成

GAEにデプロイするRailsアプリのディレクトリ直下にapp.yamlを作成します。

今回はスタンダード環境なので「env: flex」はコメントアウトしておきます。またapp.yamlに環境変数を書くことでGAEに環境変数を渡せます。

secret keyは以下のコマンドで確認できます。

・app.yaml

GAEにデプロイしたアプリはDocker上で動くためDockerfileがプロジェクト直下にあるとruntime rubyでデプロイができません。

runtime rubyでデプロイする場合は、DockerfileをDockerfile-devなどに置き換えておきましょう。

 

.gcloudignoreの作成

デプロイしないファイルを指定するために.gcloudignoreファイルを作成します。

・.gcloudignore

 

MySQL用Cloud SQLをセットアップ

RailsアプリでCloud SQLを使用するために、mysql2とappenginegemをGemfileファイルに追加します

以下のコマンドでインスタンス接続名を取得できます。
gcloud sql instances describe < インスタンス名 >

・database.yml

 

GAEにデプロイ

以下のコマンドで、GAEアプリを作成します。

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

アセットのコンパイルが完了したらGAEにデプロイします。

 

マイグレーションでテーブル作成

以下のコマンドでプロジェクトを一覧表示できます。アプリのデプロイに使用するプロジェクトを見つけ、プロジェクト番号をコピーします。

roles/editorデータベース移行を実行するロールのプロジェクトIAMポリシーに新しいメンバーを追加します。

先ほど追加したappengineを使用して、Cloud SQL上でのマイグレーションを実行します。

Cloud SQL画面の「Cloud Shellを使用して接続」から以下のコマンドで接続し、実際にテーブルが作成されたか確認してみましょう。

 

以降のデプロイ

以降、ソースを更新して再度デプロイする場合は以下のコマンドで実行する流れになります。

 

ハマりポイント

① コンパイル時にエラー

コンパイル時に以下のエラーが発生。

develop環境では使用しないようfalseにすることで解決しました。

・development.rb

 

② MySQLに接続できない

以下のエラーによりCloud SQLのMySQLに接続できずハマり。。

公式ではdatabase.yamlの「/cloudsql/< インスタンス接続名 >」の箇所がhostとなっていたため、hostで書いていたのですが、socketに変更することで解決しました。。

参考:

・修正前

・修正後

 

③ GAEのデフォルトTime Outが10分なためSeedが完了しない

GAEのデフォルトタイムアウトが10mのため、Seedが完了せず途中で終了してしまう。。

GAE_TIMEOUTオプションでタイムアウトを伸ばすことができました。1h23m45sの形式で指定できます。

参考:

以上、Google App EngineのRuby 2.5 StandardでRails環境構築する方法とCloud SQLのMySQLとの接続方法でした。