我使用 Rails 5.2.3 和 PostGIS 2.5 在 Postgres 11 上运行,在 Docker Compose 环境中设置。我已经设置了以下内容config/application.rb
:
config.active_record.schema_format = :sql
这样就可以丢弃 Schema 中的特殊功能。但是,在 期间这样做db:migrate
,我收到以下错误:
pg_dump: [archiver (db)] 与数据库“development”的连接失败:致命:用户“root”的密码验证失败
执行的命令是:
pg_dump -s -x -O -f /var/www/dev/db/structure.sql -T geography_columns -T geometry_columns -T layer -T raster_columns -T raster_overviews -T spatial_ref_sys -T topology development
报错的原因是这里没有root
用户;事实上,我在我的数据库配置中使用了不同的用户名:
default: &default
adapter: postgis
encoding: unicode
host: <%= ENV['DATABASE_HOST'] %>
user: <%= ENV['DATABASE_USER'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("DATABASE_POOL") { 10 } %>
用户不是 root
,Rails 应用程序本身一切正常,它可以使用环境变量中指定的用户连接到数据库。
看起来pg_dump
,当从 Rails 调用以转储模式时,没有使用配置中的正确用户名,而是回退到root
.
我在源代码中看到一些配置环境变量,但是我应该如何设置它们,为什么 Rails 默认不这样做?
我认为当我在我的docker-compose.yml
文件中创建一个PGUSER
与DATABASE_USER
. 但这似乎是一种解决方法 - 这是我看到的错误还是一些预期的行为?
到目前为止,我找到的唯一解决方案是PGUSER
为 Rails 容器指定一个额外的环境变量。
我认为这是一个错误或没有正确记录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句