rake db:create failed,postgresql 8.4的身份验证问题

时间:2011-04-28 10:38:58

标签: ruby-on-rails authentication rake rails-postgresql

首先,请原谅我的完全无声。我真的试图找到一个解决方案,但现在我陷入了困境,完全无能为力。

我正在尝试在远程服务器上部署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;”看到了这一点。 - 密码字段为空。由于这个愚蠢的错误,我三天的生命浪费了......

6 个答案:

答案 0 :(得分:19)

我很长时间以来一直坚持这个问题,并且去了各种各样的链接(包括这篇文章中提供的链接)试图找到答案,但无济于事。但是,解决方案非常简单。虽然许多其他答案都在正确的轨道上,但这里是解决问题的确切步骤:

  1. 在您选择的文本编辑器中打开您的pg_hba.conf文件。 (它位于/ etc / postgresql // main)

  2. 导航到以下行:

    #“local”仅适用于Unix域套接字连接

  3. 并粘贴在它下面:

      local all         all                 trust
    

    这将信任所有尝试连接到本地计算机上的psql服务器的unix用户。 (有关列功能的更多信息,请阅读页面顶部的文档)

    1. 保存pg_hba.conf文件并退出文本编辑器。

    2. 运行以下命令重新启动Postgresql服务器:

      service postgresql restart

    3. 现在尝试通过运行:

      启动psql服务器

      psql -d -U(或简称“psql”)

    4. 您应该可以毫无问题地登录。

    5. *注: 所有这些都假设您有一个有效的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中,它看起来像这样:

enter image description here

在调用rake db:create之后,您可以取消此权限。

答案 5 :(得分:0)

就我而言,我发现host文件中的后续pg_hba.conf权限规则行覆盖了早期的local行。我正在正确配置local行以使用md5身份验证,但host行设置为ident,我将其更改为md5

正如其他人在此强调的那样,请注意使用trust是一种不安全的方法,因此不应在任何生产方式部署中使用它。