首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails/PostgreSQL::ConnectionBad:致命:用户密码身份验证失败(用于CI/CD)

Rails/PostgreSQL::ConnectionBad:致命:用户密码身份验证失败(用于CI/CD)
EN

Stack Overflow用户
提问于 2022-02-25 13:29:00
回答 1查看 325关注 0票数 0

首先,我知道这个问题有答案:

  1. PG::ConnectionBad: FATAL: password authentication failed for user "alphauser"
  2. Rails: FATAL - Peer authentication failed for user (PG::Error)

但是在任何情况下,您都必须手动执行,我想找到一个答案,我可以在我的CI/CD管道上自动完成,以便在生产中部署。

我得到的错误是:

代码语言:javascript
复制
FATAL:  password authentication failed for user "Jenkins_project"
Couldn't create 'Jenkins_project_production' database. Please check your configuration.
rake aborted!
PG::ConnectionBad: FATAL:  password authentication failed for user "Jenkins_project"

当我试图创建和迁移DB时,就会发生这种情况:

代码语言:javascript
复制
docker-compose -f docker-compose.override.yml --env-file .env run web rake db:create db:migrate

我使用-f docker-compose.override.yml是因为我试图将它部署到AWS EC2服务器中。docker-compose.override.yml看起来如下所示:

代码语言:javascript
复制
version: "3"

services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-default}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-default}
      JENKINS_PROJECT_DATABASE_PASSWORD: ${JENKINS_PROJECT_DATABASE_PASSWORD:-default}
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-default}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-default}
      POSTGRES_HOST: ${POSTGRES_HOST:-default}
      JENKINS_PROJECT_DATABASE_PASSWORD: ${JENKINS_PROJECT_DATABASE_PASSWORD:-default}

这是连接到.env文件的,所以我在docker-compose命令上调用--env-file .env

.env看起来如下所示:

代码语言:javascript
复制
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_HOST=host
JENKINS_PROJECT_DATABASE_PASSWORD=jenkins_password

我的database.yml看起来是这样的:

代码语言:javascript
复制
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: user
  password: password
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: Jenkins_project_development

production:
  <<: *default
  database: Jenkins_project_production
  username: Jenkins_project
  password: <%= ENV['JENKINS_PROJECT_DATABASE_PASSWORD'] %>

我要做的是在运行命令时将.env文件“机密”传递给docker-compose.override.yml上的每个服务,然后从那里填充database.yml上的<%= ENV['JENKINS_PROJECT_DATABASE_PASSWORD'] %>

我好像做错了什么,但我想不出是什么。同样,我知道我可以手动完成,但我想让CI/CD管道自动部署。

如果任何人有任何想法,请分享。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-26 08:53:05

通过从生产中删除usernamepassword并将这些值保留在默认值中解决了这个问题:

代码语言:javascript
复制
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: user
  password: password
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: Jenkins_project_development

production:
  <<: *default
  database: Jenkins_project_production
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71266585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档