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)
当您连接到 Postgres 时,它默认为当前的 Unix 用户 ( $USER)。在 Docker 下,默认情况下您是“root”。但是,Postgres 默认没有任何名为“root”的用户。相反,超级用户被命名为“postgres”。
我认为您的网络应用程序指定了一个数据库用户名,而您的测试则没有。您可以尝试将PGUSER环境变量设置为postgres.
| 归档时间: |
|
| 查看次数: |
1334 次 |
| 最近记录: |