运行 rake db:schema:load 时出现“致命:角色“root”不存在”

Posted

技术标签:

【中文标题】运行 rake db:schema:load 时出现“致命:角色“root”不存在”【英文标题】:"FATAL: role "root" does not exist" when running rake db:schema:load 【发布时间】:2019-02-21 09:25:11 【问题描述】:

我完成了一个小应用程序的开发,并尝试将其投入生产。我将应用程序复制到一个新文件夹,使用新用户创建了一个新的 psql 数据库,调整了我的 database.yml 文件并尝试运行 rake db:schema:load 以使我的数据库处于正确的状态。 Rake 能够连接到我的数据库,因为执行了第一步,但之后,它会中止并显示以下消息。据谷歌告诉我,这应该是用户的问题。但是,由于 rake 可以执行第一步,我怀疑我有问题。

[root@l1vmgt08 web_qip_parser_v2]# rake db:schema:load    
-- enable_extension("plpgsql")
   -> 0.0171s
-- create_table("qip_changes", :force=>:cascade)
   -> 0.0919s
-- create_table("users", :force=>:cascade)
   -> 0.0989s
-- add_foreign_key("qip_changes", "users")
   -> 0.0042s
-- enable_extension("plpgsql")
rake aborted!
ActiveRecord::NoDatabaseError: FATAL:  role "root" does not exist

config/database.yml:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS")  5  %>

development:
  <<: *default
  database: my_db_name
  username: my_user_name
  password: my_password
  host: localhost
  port: 5432

test:
  <<: *default
  database: my_db_name

production:
  <<: *default
  database: my_db_name
  username: my_user_name
  password: my_password
  host: localhost
  port: 5432

我的 Dev 和新的 Prod 用户的 Psql 输出用于权限比较:

postgres=# \l
                                                 List of databases
          Name          |       Owner       | Encoding |   Collate   |    Ctype    |       Access privileges        
------------------------+-------------------+----------+-------------+-------------+--------------------------------
my_dev_user_name        | postgres          | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres                  +
                        |                   |          |             |             | postgres=CTc/postgres         +
                        |                   |          |             |             | my_dev_db_name=CTc/postgres
 my_user_name           | postgres          | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres                  +
                        |                   |          |             |             | postgres=CTc/postgres         +
                        |                   |          |             |             | my_db_name=CTc/postgres

所以在我看来,我正在尝试使用本地用户通过 UNIX 套接字进行连接。我找到了一些描述这个问题的文章。当我通过 TCP/IP 连接时,应该通过简单地将“主机:本地主机”添加到我的 database.yml 文件来解决此问题。但是,这正是我所做的,所以我不知道如何进行

这里是我的 pg_hba.conf:

 # TYPE  DATABASE        USER            ADDRESS                 METHOD
 local   all             all                                     peer
 host    all         all         127.0.0.1/32          md5

服务器上正在运行另一个应用程序,它可以工作。它具有与我相同的 database.yml 配置集。

【问题讨论】:

【参考方案1】:

可能是由于缺少用于测试环境的username 语句而发生的。 请看this question

【讨论】:

我刚刚添加了用户/密码进行测试。现在我得到“用户“my_db_user”的对等身份验证失败”。我用“psql -d my_db_name -U my_user_name -h localhost”测试了密码,它正在工作。 “对等身份验证”意味着它使用 unix 套接字并期望连接的 unix 用户具有与 postgresql 用户名相同的 unix 用户名。请在此处查看接受的答案:***.com/questions/15306770/… 这就是我以前见过的。由于我在共享服务器上工作,我需要检查 postgres 配置。但是 tcp/ip 连接通常可以正常工作,我不明白为什么这次它不工作.. 因为您的本地 unix 用户名是 root,而您尝试以 my_user_name 连接,它们应该是相同的 服务器上正在运行另一个应用程序,它也使用 tcp/ip 连接到数据库,它的 database.yml 看起来像我的。我还发现,“主机:本地主机”足以告诉 Rails 通过 tcp/ip 连接。所以我不明白,为什么它仍然通过 unix 套接字打开它。此外,由于其他应用程序,我无法更改 postgres 配置。我已经在我最初的帖子中添加了配置,从我在文档中看到的看起来不错

以上是关于运行 rake db:schema:load 时出现“致命:角色“root”不存在”的主要内容,如果未能解决你的问题,请参考以下文章

rake db:schema:load 不填充 schema_migrations 表

rake db:schema:load 与迁移

Ruby on Rails:运行 rake 命令时出现错误消息

Rails db:schema:load 错误:Mysql2::Error:无法删除或更新父行:外键约束失败

你已经激活了 X,但是你的 Gemfile 需要 Y

rails 执行rake