色々と記事としては、このやり方を取り上げている方が居るのですが、どうにも毎回忘れがちなことが多いので、自分用に備忘録として残そうと思います。
Railsのセットアップをする
最低限、初期画面が出る所までやる。
私はIDEをRubyMine使ってるので、RubyのバージョンとRailsのバージョンを適切に選んだ後に「rails s」を実行して初期画面が見えればOK!
GCPでセットアップ
パパっとGoogleアカウントを作ります。アカウントあったら、パパっとプロジェクトを作ります。
プロジェクトを作ったらホームにあるプロジェクトIDとプロジェクトナンバーをメモしておくこと。
アカウント登録した場合は、お支払い情報を入力して、課金を有効化しておくこと。
CloudSQLを作成
CloudSQLをメニューから選んで作成。
この時点で作成ボタンが無い画面だったら課金が有効化されてないので、再度確認をしておくこと。
作成する時のrootパスワードは必ず控えておくこと。
あと、リージョンは「asia-northeast1」ここが東京なので、覚えておくこと。
ただ、ちょっと高いので個人でやる場合は違う所でも良いかも。
CloudSQLの設定
まずは開発端末から接続出来るように、接続タブで許可するIPにグローバルIPを設定する。
グローバルIPはぐぐって調べること。
データベースを2つ作成。開発用と本番用で分けること。
config/database.ymlの編集
今度はRails側。host部分をCloudSQLのパブリックIPアドレスに設定する。
その後、同様に「rails s」を実行して、表示されればOK。
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側に記載
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の設定を掲載
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)