我完成了一个小应用程序的开发,并尝试将其投入生产。我将应用程序复制到一个新文件夹,用新用户创建了一个新的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配置集。
由于没有针对测试环境的username
声明,可能会发生这种情况。请参阅this question