Проблема ConnectionBad с приложением Rails 5, запущенным в облаке Google, запускается в экземпляр Google Cloud SQL через сокет

Когда я использую службу Google Cloud Run, мой контейнер докеров вернет ошибку:

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

Я включил cloud sql admin api в соответствующем проекте. Я подключился к экземпляру, который работал со службами GCP, доступными в облачной оболочке Google, и проверил /var/run/postgresql/.s.PGSQL.5432. Не было ничего доступного. Доки Google Cloud Run говорят, что нужно установить для сокета значение /cloudsql/, но, похоже, и там нет никакого сокета.

Ничто в облачном sql / run open issues или в системе отслеживания проблем не предполагает, что это должно быть проблемой.

Команда Deploy использует флаг --add-cloudsql-instance без ошибок, поэтому я считаю, что здесь не должно быть никаких проблем.

Соответствующий раздел database.yml:

staging:
  adapter: postgresql
  encoding: utf8
  pool: 5
  timeout: 5000
  database: project_staging
  username: project_staging
  password: <%= Rails.application.credentials[:db_password] %>
  socket: "/cloudsql/my-project-name:asia-northeast1:project-database-name/"

Dockerfile для настройки контейнера -

FROM ruby:2.6.2

ARG environment
// Bunch of env code

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /usr/src/app
RUN gem install bundler
COPY Gemfile Gemfile.lock ./
ENV BUNDLE_FROZEN=true
RUN bundle install
COPY . .

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

ENV RAILS_LOG_TO_STDOUT=true
Do I need to install more than just postgresql-client here?

Почти наверняка не имеет значения, но сценарий запуска:

cd /usr/src/app

bundle exec rake db:create

bundle exec rake db:migrate

# Do some protective cleanup
> log/${RAILS_ENV}.log
rm -f tmp/pids/server.pid

bundle exec rails server -e ${RAILS_ENV} -b 0.0.0.0 -p $PORT

Я честно сбит с толку. Это проблема конфигурации? Проблема с запуском в облаке? Мне не хватает какого-то пакета? Я ожидал, что он просто подключится к сокету без проблем при загрузке.


person JapanRob    schedule 12.07.2019    source источник
comment
Отредактируйте свой вопрос и включите полную команду развертывания.   -  person John Hanley    schedule 14.07.2019


Ответы (1)


Я следил за этим руководством по Medium (parts 1, 2, 3 и 4) для создания облака. Запустите Ruby и подключите его к экземпляру Cloud SQL без каких-либо проблем, можете ли вы попробовать сравнить его с вашим развертыванием или даже попытаться выполнить шаги, чтобы увидеть, отличается ли то, что вы сделали, от того, что они там объясняют?

Кроме того, если это помогает, есть аналогичный случай, который я нашел в другом сообщение, в котором они столкнулись с той же проблемой, даже если она не развернута в Cloud Run, может быть полезным. Другой Средний пост рассматривает ту же проблему и предлагает набор решений.

person bhito    schedule 15.07.2019