2
0

More than 1 year has passed since last update.

GoogleCloudRun初心者がRailsのデプロイでつまづいたエラー7種

Last updated at Posted at 2022-07-25

この記事は

これは、普段AWS ECSを利用している筆者が、手元のRailsアプリでGoogle Cloud Runを試したら思いのほか手間取った話。慣れればCloud Runは推せる😎

やりたかったこと

ターミナルで華麗にデプロイ

前提

  • ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [-darwin21]
  • Rails 7.0.3
  • Google Cloud SDK 393.0.0
  • Docker Image ruby:2.7-alpine
  • ProductName: macOS
  • ProductVersion: 12.4

参考にした手順と発生したエラー

Error 1: NoMethodError: undefined method `size' for nil:NilClass 1

これ一番手間取った。ググってもrails5のcredentialしか出てこなくて今回記事投稿しようと思ったきっかけ。

ブラウザで、An unhandled lowlevel error occurred. The application logs may have details. を表示し、以下のようなログを出力する。

2022-07-24 22:09:09 +0900 Rack app ("GET /" - (240f:78:135b:1:8405:cf55:4f91:c2e0)): #<NoMethodError: undefined method `size' for nil:NilClass>

解決方法

(なぜ解決できるのかは調べてない)

1 gem 'appengine' の追加

bundle add appengine

2 libc6-compatのインストール

# Check <https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine> to understand why libc6-compat might be needed.
RUN apk add --no-cache --update libc6-compat
RUN ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2

Error 2: 502 Bad Gateway

ブラウザで、upstream connect error or disconnect/reset before headers. reset reason: protocol errorを表示する。

解決方法 

とりあえず動かしたかったので、gcloud run deployのオプションを--no-use-http2に変更

参考記事 🙌

Error 3: Can't connect to MySQL

ActiveRecord::ConnectionNotEstablished: Can't connect to MySQL server on '0.0.0.0' (115)

解決方法 

database.ymlにhost: localhostを追加

# config/database.yml

socket: /cloudsql/project_id:us-central1:db-name
host: localhost <-- 追加

参考記事 🙌

Error 4: DatabaseConnectionError

ActiveRecord::DatabaseConnectionError: There is an issue connecting with your hostname: /cloudsql/project-id:us-central1:db-name.
Please check your database configuration and ensure there is a valid connection to your database.

解決方法

Cloud Run サービス アカウントにCloud SQL Client ロールを割り当て

参考記事 🙌

Error 5: Revision 'xxxxx' is not ready and cannot serve traffic.

ERROR: (gcloud.run.deploy) Revision 'app-00032-rob' is not ready and cannot serve traffic.

解決方法 

無視してgcloud run deploy ...を繰り返す。だいたい2回目には成功

Error 6: Cloud Storage - Service account credentials 'issuer (client_email)' is missing

Service account credentials 'issuer (client_email)' is missing. To generate service account credentials see https://cloud.google.com/iam/docs/service-accounts

解決方法

  1. Service Account作り権限を付与、鍵を作成
  2. config/storage.ymlにcredentialsを追加
google:
  service: GCS
  project: <%= ENV.fetch('GOOGLE_PROJECT_ID') { 'GOOGLE_PROJECT_ID' } %>
  bucket: <%= ENV.fetch('STORAGE_BUCKET_NAME') { 'STORAGE_BUCKET_NAME' } %>
  credentials: <%= Rails.root.join("project-id.json") %> # <-- 追加

参考記事 🙌

Error 7: Cloud Storage - forbidden

forbidden: service@project-id.iam.gserviceaccount.com does not have storage.objects.create access to the Google Cloud Storage bucket.

解決方法

バケットのプリンシパルに作成したサービスアカウント追加し、ストレージ管理者のロールを与える

参考記事 🙌

最後までお読みいただきありがとうございます。
もし、気に入っていただける内容ありましたら、「いいね」や「シェア」していただけるととても嬉しいです。
今後の活動の大きな励みになります!

2
0
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
2
0