我正在尝试使用Capistrano部署Rails 5应用程序,并且我挂起了db:migrate步骤。
具体来说,当我的脚本尝试运行db:migrate时,我收到错误:
ActiveRecord::NoDatabaseError: FATAL: role "admin" does not exist
我的database.yml文件对于生产块看起来像这样:
production:
adapter: postgresql
encoding: unicode
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
url: <%= ENV['DATABASE_URL'] %>
我的database_url采用以下形式:
postgresql:://mydb_user:mydbuser_pass@localhost/db_name
使用mydb_user,mydbuser_pass和db_name替换为我自己的正确值。
在postgres内部,我可以在我的数据库中看到这些权限:
db_name | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres + postgres=CTc/postgres + mydb_user=CTc/postgres
我认为这意味着mydb_user具有使用我的数据库所需的权限。
现在,我在capistrano部署期间登录的用户确实拥有“admin”的用户名,这让我相信我从根本上不了解postgres角色。当我通过数据库URL为我已创建的特定postgres用户提供用户名和密码时,为什么我当前登录的用户与postgres连接有关?这是说我的ubuntu用户名需要匹配mydb_user才能登录吗?如何使用postgres修复特定于rails和数据库URL的此错误?
答案 0 :(得分:1)
上一个评论者错了:正确的数据库 url 格式是
postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
例如:
postgresql://db_user:db_password@localhost:5432/db_name?timeout=5000&connect_timeout=5&pool=10
答案 1 :(得分:0)
经典的愚蠢错误案例。如上所述,网址中没有两个冒号,而是
postgres://
默认情况下,rails尝试连接为&#39; admin&#39;因为那是我登录的unix用户。解决方案,仔细检查你的postgres网址格式。