我正在尝试在远程服务器上部署rails 3应用程序;在我的本地VM上开发时,没有问题显示。但现在,当我尝试运行时
rake db:create
失败,错误(这里翻译,因为我是法国人):
FATAL : password authentication failed for user <<mylogin>>
这是我的database.yml:
login: &login
adapter: postgresql
username: mylogin
password: mypassword
host: localhost
port: 5432
encoding: UTF8
development:
<<: *login
database: somesite_development
test:
<<: *login
database: somesite_test
production:
<<: *login
database: somesite_production
使用命令行工具“createuser”在postgre-side创建了用户“mylogin”。它被授权创建dbs。 postgresql.conf配置服务器监听localhost。 我用pg_hba.conf尝试了很多东西,没有用 - 无论在127.0.0.1上用户“mylogin”使用的方法(ident,密码,md5),身份验证都失败了 - 尽管我从未遇到过连接/创建dbs的问题PSQL。
任何线索?
编辑:好的,发现我一直都是多么令人难以置信的愚蠢...我的用户的密码根本没有设置! 之后我想我忘了分号了ALTER USER xxxx WITH PASSWORD xxxx;
...我通过请求“SELECT * FROM pg_shadow;”看到了这一点。 - 密码字段为空。由于这个愚蠢的错误,我三天的生命浪费了......
答案 0 :(得分:19)
我很长时间以来一直坚持这个问题,并且去了各种各样的链接(包括这篇文章中提供的链接)试图找到答案,但无济于事。但是,解决方案非常简单。虽然许多其他答案都在正确的轨道上,但这里是解决问题的确切步骤:
在您选择的文本编辑器中打开您的pg_hba.conf文件。 (它位于/ etc / postgresql // main)
导航到以下行:
#“local”仅适用于Unix域套接字连接
并粘贴在它下面:
local all all trust
这将信任所有尝试连接到本地计算机上的psql服务器的unix用户。 (有关列功能的更多信息,请阅读页面顶部的文档)
保存pg_hba.conf文件并退出文本编辑器。
运行以下命令重新启动Postgresql服务器:
service postgresql restart
现在尝试通过运行:
启动psql服务器psql -d -U(或简称“psql”)
您应该可以毫无问题地登录。
*注: 所有这些都假设您有一个有效的psql用户名用于登录。如果您没有按照以下链接设置一个:
设置用户: http://erikonrails.snowedin.net/?p=274
确保您拥有有效的postgres用户: http://archives.postgresql.org/pgsql-novice/2002-08/msg00072.php
列出所有现有的psql用户: 如果您正在寻找“LIST USERS”或“DISPLAY USERS”命令,请尝试:
“select * from pg_user;” (登录psql时)
祝你好运!答案 1 :(得分:2)
ALTER USER xxxx WITH PASSWORD xxxx ;
...我通过请求“SELECT * FROM pg_shadow;”看到了这一点。 - 密码字段为空。由于这个愚蠢的错误,我三天的生命浪费了......
答案 2 :(得分:2)
我有同样的问题。在我的情况下,这是因为在我的 database.yml 文件中,用户名以大写字母开头,但在数据库中它全是小写的。
解决方案:从postgres命令行创建用户时,它会将所有字母转换为小写。对于使用大写字母,必须使用double quotes。
示例:强>
create user AlbertEinstein; result = alberteinstein
VS
create user "AlbertEinstein"; result = AlbertEinstein
答案 3 :(得分:0)
以下是一些适合您的简明说明
http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/
基本上,您需要将localhost的身份验证方法设置为“trust”。
答案 4 :(得分:0)
您需要在postgresql中为“myuser”提供“可以创建数据库对象”的权限。
在pgadmin中,它看起来像这样:
在调用rake db:create之后,您可以取消此权限。
答案 5 :(得分:0)
就我而言,我发现host
文件中的后续pg_hba.conf
权限规则行覆盖了早期的local
行。我正在正确配置local
行以使用md5身份验证,但host
行设置为ident
,我将其更改为md5
正如其他人在此强调的那样,请注意使用trust
是一种不安全的方法,因此不应在任何生产方式部署中使用它。