当前位置: 首页 > 知识库问答 >
问题:

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

谭修然
2023-03-14

我正在尝试使用Capistrano部署Rails 5应用程序,但我被db:迁移步骤挂起了。

具体来说,当我的脚本尝试运行db:migrate时,会出现以下错误:

ActiveRecord::NoDatabase aseError: FATAL:角色"admin"不存在

我的数据库。生产块的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'] %>

我的数据库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_用户才能登录?如何通过postgres修复特定于rails和数据库URL的错误?

共有2个答案

扶隐水
2023-03-14

愚蠢错误的典型案例。URL中没有我上面描述的两个冒号,而是

postgres://

默认情况下,rails试图以“管理员”身份连接,因为那是我登录的unix用户。解决方案,仔细检查您的postgres url格式

厍晋鹏
2023-03-14

prev commenter错误:数据库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
 类似资料: