Google App Engine Rails Postgres не будет подключаться к базе данных Cloud SQL: такого файла или каталога нет - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть приложение Rails, которое должно быть размещено через Google Cloud App Engine. Он имеет Postgres настройки базы данных. Я следовал этому руководству: https://cloud.google.com/ruby/rails/using-cloudsql-postgres

Я добавил все свои конфигурации в app.yaml:

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

env_variables:
  SECRET_KEY_BASE: [SECRET_KEY]

beta_settings:
  cloud_sql_instances: [INSTANCE]

и database.yml:

production:
  adapter: postgresql
  encoding: unicode
  pool: 5
  timeout: 5000
  username: postgres
  password: [DB_PASSWORD]
  database: [DB_DATABASE]
  host: /cloudsql/[INSTANCE]

Экземпляр Cloud SQL настроен правильно, так как я могу подключиться к нему с помощью Cloud SQL proxy: https://cloud.google.com/sql/docs/postgres/connect-admin-proxy

После развертывания в App Engine и попытки его миграции выдает мне следующую ошибку:

PG::ConnectionBad: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/cloudsql/[INSTANCE]/.s.PGSQL.5432"?

Это также происходит с локально работающим прокси и попыткой

RAILS_ENV=production rake db:create rake db:migrate

Я вижу, что папка / cloud sql отсутствует при IS SH в виртуальную машину App Engine. Я дважды проверил, права доступа должны быть, и Cloud SQL API и Cloud SQL Admin API включены. Я также заметил, что при SSHing в виртуальные машины App Engine (очевидно, их две, я пробовал обе) и при запуске ls каталоги полностью пусты. Развертывание работало, хотя я могу получить доступ к приложению, но не к контроллеру, который требует подключения к БД.

1 Ответ

0 голосов
/ 07 мая 2020

Я следовал этому старому, но лучше объясненному учебнику GCP (это учебное пособие предназначено для использования облачной оболочки), и я понял, что обязательно иметь Cloud SQL Proxy в локальном окружении (в другом терминале) или фон)

Облако sql прокси создаст файл сокета unix

Listening on /cloudsql/tetsingfakeproject:us-central1:testdatabase ce/.s.PGSQL.5432 for tetsingfakeproject:us-central1:testdatabase

Это для выполнения миграций, и вы можете передать это шаг в локальной среде.

Замечания по использованию этого учебника

Я выполнил все шаги старого учебника с некоторыми альтернативными шагами

На шаге 3 я запустил новейшую команду для включения SQL admin api:

gcloud service enable sqladmin.googleapis.com

На шаге 10 я установил пакеты pg и appengine, используя эти команды вместо этого изменяют файл "Gemfile"

bundle add pg
bundle add appengine

Если время развертывания этого приложения ruby занимает более 10 минут, выполните эту команду

gcloud config set app/cloud_build_timeout 3600s

И снова запустите gcloud app deploy.

после этого учебник Я могу получить функциональную службу App Engine, используя ruby + postgresql, у меня было много проблем, используя другой учебник

...