LoginSignup
3
3

More than 5 years have passed since last update.

GoogleAppEngine + CloudSQL でRailsセットアップ備忘録

Last updated at Posted at 2019-06-05

色々と記事としては、このやり方を取り上げている方が居るのですが、どうにも毎回忘れがちなことが多いので、自分用に備忘録として残そうと思います。

Railsのセットアップをする

最低限、初期画面が出る所までやる。
私はIDEをRubyMine使ってるので、RubyのバージョンとRailsのバージョンを適切に選んだ後に「rails s」を実行して初期画面が見えればOK!

GCPでセットアップ

パパっとGoogleアカウントを作ります。アカウントあったら、パパっとプロジェクトを作ります。
プロジェクトを作ったらホームにあるプロジェクトIDとプロジェクトナンバーをメモしておくこと。
アカウント登録した場合は、お支払い情報を入力して、課金を有効化しておくこと。

CloudSQLを作成

CloudSQLをメニューから選んで作成。
この時点で作成ボタンが無い画面だったら課金が有効化されてないので、再度確認をしておくこと。
作成する時のrootパスワードは必ず控えておくこと。
あと、リージョンは「asia-northeast1」ここが東京なので、覚えておくこと。
ただ、ちょっと高いので個人でやる場合は違う所でも良いかも。

CloudSQLの設定

まずは開発端末から接続出来るように、接続タブで許可するIPにグローバルIPを設定する。
グローバルIPはぐぐって調べること。
データベースを2つ作成。開発用と本番用で分けること。

config/database.ymlの編集

image.png

今度はRails側。host部分をCloudSQLのパブリックIPアドレスに設定する。
その後、同様に「rails s」を実行して、表示されればOK。

app.yaml作成

app.yaml
entrypoint: bundle exec rackup --port $PORT
env: flex
runtime: ruby

env_variables:
  SECRET_KEY_BASE: [key]

基本的にはこれでOK!
[key]に入るのは下記コードで取得した値。

bundle exec rake secret

CloudSDKの設定

ターミナルから下記コマンドで設定

gcloud init

プロファイルを作成して、Googleアカウントでログインし、作成していたプロジェクトを選択しておく。

GoogleAppEngine作成

やり方が2つある。

gcloud app create

これを入力して設定する方法もあるが、Webブラウザでやる方が楽。
相変わらずリージョンは「asia-northeast1」が良いと思う。

Windowsで作成していた場合

bundle lock --add-platform ruby
bundle lock --add-platform x86_64-linux

毎回忘れるのですが、これを必ず一回は実行をする。
WindowsでRails newしたものは、linuxに受け入れさせようとすると拒否されるので、linuxでも受け入れてっていう魔法のおまじないみたいなもの。絶対デプロイ前に入れること。

とりあえずデプロイ

多分成功すると思うけど、とりあえず下記コマンドでデプロイ。

gcloud app deploy

補足でデプロイ時に使えるオプションも載せておく。

バージョン

--version バージョン名

バージョンを変えてアップロードすることが出来る。管理はGAEのバージョン項目。
別バージョンにしてアップロードして、何かミスった時には前のバージョンにトラフィックを切り替えることが出来る。

トラフィック割当回避

--no-promote

これをつけるとトラフィックに自動で割り当てられるのを回避出来る。
例えば、ステージングでアップロードした時とかには必須で付ける必要がある。これでアップロードした場合、トラフィックは割り当てられないが、アップロードしたページを見ることは出来るので、便利な代物。

ちなみに、トラフィックの割り当て管理はGAEのバージョン内で行うことが出来る。

サービスアカウントに割当

大体の人がここで躓く所。

gcloud projects add-iam-policy-binding [projectID] ^
  --member=serviceAccount:[project number]@cloudbuild.gserviceaccount.com ^
  --role=roles/editor

私はWindowsなので、Windowsに準拠して記載する。
プロジェクトIDとプロジェクトナンバーを変更して、ターミナルで打ち込む。やっていることは、ビルドをする時にCloudSQLの編集権限をビルドしているサービスアカウントに付与をするというもの。
これをやらないと上手くCloudSQLに紐づけがされない。

CloudSQL Admin API有効にする

もう一つ絶対に忘れていけないのがこれ。
「APIとサービス」からライブラリを押下して、CloudSQL Adminで検索し、出てきたAPIを有効にする。
これでGAEがCloudSQLを使えるようになった。

CloudSQLの設定をRails側に記載

database.yml
production:
  adapter: mysql2
  pool: 5
  encoding: utf8mb4
  timeout: 5000
  database: [database name]
  username: [username]
  password: [password]
  socket: /cloudsql/[cloudsql socket]

こんな感じで編集する必要がある。
socket部分はCloudSQLにある「インスタンス接続名」を設定してあげる

app.yamlにCloudSQLの設定を掲載

app.yaml
beta_settings:
  cloud_sql_instances: [cloudsql socket]

database.ymlのsocketと設定した内容と同じ内容で設定してあげる。

再デプロイ

その前にrails側でプリコンパイルをしておく。
デプロイ前にはプリコンパイルをする癖をつける。

rails assets:precompile
gcloud app deploy

確認

無事にアップロードされているか確認をして、何かあったらプリコンパイル+デプロイをする。
ここまでを出来れば1時間半くらいで出来れば良い。

GAEへのデプロイは本当楽なんだけど、長いのがネック……なるべく万全の状態でデプロイ出来るように心がけて行きたい!

参考サイト・記事

https://cloud.google.com/ruby/rails/using-cloudsql?hl=ja
AppEngine + Cloud SQL で Railsをデプロイする方法(GCP)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3