GAE
Rails5

Google App Engine で Rails 5 を動かす

More than 1 year has passed since last update.

Google App Engine で Rails 5 を動かしてみました。
この記事では、その流れを紹介しようと思います。

前提

Cloud Console 上で、新しい Cloud Platform プロジェクトを作成しておきます。
App Engine アプリケーションを作成し、課金を有効にします。

このあたりの作業の流れは、公式ドキュメントを読むことをお勧めします。
https://cloud.google.com/ruby/getting-started/hello-world?hl=ja

Cloud Shell を使う

自分の PC 上で開発したアプリを SDK でデプロイすることもできるのですが、ここでは Cloud Shell を使ってみます。ウェブコンソールの右上にアイコンが並んでいて、下記の赤で囲ったアイコンをクリックすると Cloud Shell が起動します。
cloud-shell.png

Rails のデプロイを試す

では、Cloud Shell 上で Rails のプロジェクトを作成しましょう。

$ rails new sample_app

hello world を表示するページを作成します。ソースは Rails Tutorial と同じものです。

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    render html: "hello, world!"
  end
end
config/routes.rb
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root 'application#hello'
end

デプロイしてみます。デプロイ時に app.yaml を自動的に作ってくれます。

$ gcloud app deploy

ログを見て切り分け

ページが正しき表示されることを期待してページにアクセスしたところ、こんな表示になっていました。
err-page.png

ログを見てみます。Cloud Console 上で、ロギングのところで GAE アプリケーションを選ぶとログを見ることができます。

logging.png

お、これがエラー原因のようですね。

errlog.png

上記エラーへの対応を行います。

$ rails secret

を実行し文字列を取得した後、app.yaml で環境変数の設定をします。

app.yaml
env_variables:
  SECRET_KEY_BASE: [rails secret で表示された文字列]

デプロイしなおすと、無事ページが表示されました!

web.png

課金についての注意点

スタンダード環境は無料枠がありますが、スタンダード環境のランタイムには Ruby がありません…
よって、現状はフレキシブル環境で使用するしかないようです。

https://cloud.google.com/appengine/pricing?hl=ja
https://cloud.google.com/appengine/docs/standard/

また、デフォルトではインスタンスが 2 個起動するようになっています。1 個だけでよい場合は、以下のようにしましょう。

app.yaml
manual_scaling:
  instances: 1

(追記)デプロイにかかる時間について

フレキシブル環境だとデプロイに 10 分程度要します。個人で試すときには、すぐデプロイ結果を見れないので、ちょっと不便だと感じました。サービスの選定は適材適所ですが、個人で Rails の開発を GAE で進めるのは今一つ向かないという感触です(少なくとも現時点では)。