Rake 无法在 Docker/Rails/Postgres 设置中运行 Rspec 规范(但 Web 应用程序工作正常)

jpw*_*ynn 4 postgresql ruby-on-rails heroku docker

使用 Heroku-docker 解决方案时,是否需要特殊的步骤或配置才能让 Rails(3.2.21)测试数据库(例如,Rspec 规范)在 Docker 下工作?

我正在使用 Docker Toolkit(Docker 快速入门终端)在本地运行我的 Heroku 应用程序,除了运行规范之外的一切在工作。

这有效:

docker-compose run web rake db:reset
Run Code Online (Sandbox Code Playgroud)

Web 应用程序可以正常工作,读取和写入加载了所有种子值的数据库。

但是,任何创建或使用测试数据库的命令都会失败:

docker-compose run web rake db:test:prepare
docker-compose run web rake db:test:load    
docker-compose run web rake spec
docker-compose run web bundle exec rake spec
Run Code Online (Sandbox Code Playgroud)

都抛出错误:

PG::ConnectionBad: FATAL: role "root" does not exist
Run Code Online (Sandbox Code Playgroud)

我正在使用 Heroku postgres 图像,其 app.json 如下所示:

{
  "name": "My App",
  "description": "Localized Docker Setup",
  "image": "hrails200",
  "addons": [
    "heroku-postgresql"
  ]
}
Run Code Online (Sandbox Code Playgroud)

(hrails200 是修改为使用 Ruby 2.0.0 的 heroku/ruby 镜像)

docker-compose.yml 文件以:

herokuPostgresql:
  image: postgres
Run Code Online (Sandbox Code Playgroud)

并且 web 和 worker 有一个指向 Postgres 的链接条目:

  links:
    - herokuPostgresql
Run Code Online (Sandbox Code Playgroud)

我的 config/database.yml 看起来像:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: docker_mondo_dev

test:
  <<: *default
  database: docker_mondo_test
Run Code Online (Sandbox Code Playgroud)

Nat*_*rot 5

当您连接到 Postgres 时,它默认为当前的 Unix 用户 ( $USER)。在 Docker 下,默认情况下您是“root”。但是,Postgres 默认没有任何名为“root”的用户。相反,超级用户被命名为“postgres”。

我认为您的网络应用程序指定了一个数据库用户名,而您的测试则没有。您可以尝试将PGUSER环境变量设置为postgres.