运行rake db:schema:load时,“FATAL:role”root“不存在”

问题描述 投票:0回答:1

我完成了一个小应用程序的开发,并尝试将其投入生产。我将应用程序复制到一个新文件夹,用新用户创建了一个新的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的Psql输出和新的Prod用户进行权限比较:

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连接时,通过简单地将“host:localhost”添加到我的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配置集。

ruby-on-rails rake
1个回答
0
投票

由于没有针对测试环境的username声明,可能会发生这种情况。请参阅this question

© www.soinside.com 2019 - 2024. All rights reserved.