运行 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 表
Ruby on Rails:运行 rake 命令时出现错误消息