Когда я использую службу 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
Я честно сбит с толку. Это проблема конфигурации? Проблема с запуском в облаке? Мне не хватает какого-то пакета? Я ожидал, что он просто подключится к сокету без проблем при загрузке.