当我使用谷歌云运行服务时,我的docker容器将返回错误:
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
。我 ssh 进入了我正在使用谷歌云外壳中可用的 GCP 服务的实例,并检查了/var/run/postgresql/.s.PGSQL.5432
。没有什么可用的。谷歌云运行坞说将套接字的名称设置为低于/cloudsql/
,但那里似乎也不存在套接字。
云 sql/run 未解决的问题或问题跟踪器中没有任何内容表明这应该是一个问题。
部署命令使用 --add-cloudsql-instances 标志没有错误,所以我相信那里应该没有问题。
相关数据库.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
我是否需要在这里安装不仅仅是postgresql-client?几乎可以肯定无关紧要,但开始脚本:
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
老实说,我在这里感到困惑。是配置问题吗?云运行问题?我错过了某种包裹吗?我希望它只是连接到插座而不会在启动时出现问题。
我已经按照这个 Medium 指南(第 1、2、3 和 4 部分)创建了一个使用 Ruby 运行的云并将其连接到云 SQL 实例,完全没有问题,您能否尝试将其与您的部署进行比较,甚至尝试按照步骤查看您所做的是否与他们在那里解释的内容有所不同?
此外,如果有帮助,我在另一篇文章中发现了一个类似的案例,即使它没有部署在 Cloud Run 中,他们也面临着同样的问题,可能会有所帮助。另一篇Medium帖子也解决了同样的问题,并给出了一套解决方案。
此错误消息显示您的应用程序尝试连接到"默认本地主机"套接字文件 (/var/run/postgresql/.s.PGSQL.5432),而不是/cloudsql/my-project-name:asia-northeast1:project-database-name/
套接字文件。
这意味着您的 Rail 应用程序数据库配置中的 HOST 值为"空"或"本地主机"。您应该尝试从 Rail 应用程序中转储数据库配置并更正此值。