Rails - 使用url连接到postgres,角色不存在

时间:2016-12-31 00:43:41

标签: ruby-on-rails ruby postgresql ruby-on-rails-5

我正在尝试使用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的此错误?

2 个答案:

答案 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网址格式。