2011-04-28 32 views
6

第一件事,請原諒我的完全noobness。我真的試圖找到一個解決方案,但現在我卡住了,完全無能爲力。rake db:創建失敗,使用postgresql驗證問題8.4

我想在遠端服務器上部署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 

用戶「mylogin」已經使用命令行工具「createuser」在postgre-side創建。它有權創建dbs。 postgresql.conf將服務器配置爲在本地主機上偵聽。 我已經嘗試了許多與pg_hba.conf,沒有工作 - 無論使用的方法(身份,密碼,md5)用戶「mylogin」在127.0.0.1,身份驗證失敗 - 雖然我從來沒有遇到問題連接/創建dbs用psql。

任何線索?

編輯:好吧,發現多麼令人難以置信的愚蠢我一直......我的用戶密碼根本沒有設置! 我想我忘了分號後

變更用戶xxxx WITH PASSWORD xxxx;

...我看到這個請求「SELECT * FROM pg_shadow;」 - 密碼字段爲空。我生命中的三天浪費,因爲這個愚蠢的錯誤......

回答

2

好吧,發現我一直非常愚蠢......我的用戶密碼根本沒有設置!我想我忘了分號後

ALTER USER xxxx WITH PASSWORD xxxx ; 

...我看到這個請求「SELECT * FROM pg_shadow;」 - 密碼字段爲空。由於這個愚蠢的錯誤,我的生命浪費了三天...

+1

請確保你填寫了密碼...所以你可以'用戶名'改爲'用密碼xxxx';' – JaeGeeTee 2015-11-06 03:15:48

0

這裏有一些應該爲你

http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/工作簡明扼要的說明。

基本上你需要設置localhost的認證方法爲'trust'。

+0

感謝您的回覆,但正如我所說: 「我已經嘗試了許多與pg_hba.conf,沒有工作 - 無論使用的方法(身份證,密碼,md5)」 此外,我不相信我服務器管理員會很高興,如果我允許這個用戶通過信任的方式連接... 但是,嘿,謝謝你的提示,我會嘗試,如果我仍然無法連接,這意味着某些地方的東西是錯的。 – 2011-05-02 08:11:53

+0

好的,它的工作原理。現在想知道爲什麼其他方法不起作用,雖然... – 2011-05-02 09:52:13

0

您需要在postgresql中給予「myuser」特權「可以創建數據庫對象」。

在pgAdmin的,它看起來像這樣:

enter image description here

調用耙分貝後:創建,你可以帶走這個特權。

+0

謝謝,但正如我的問題(編輯)結束時所述,我的問題是由於純粹的愚蠢。我可能會補充說,後來我絆了另一個bug:ruby> 1.9.2,似乎默認的YAML分析器當前被破壞,並且不支持merge(「<<:」)鍵。 – 2011-05-27 15:42:54

19

我也被困在這個問題很長一段時間,並去了各種鏈接(包括在這篇文章中提供的)嘗試和找到答案,但無濟於事。但是,解決方案非常簡單。雖然許多其他的響應在正確的軌道上這裏是來解決問題的具體步驟:

  1. 在您選擇的文本編輯器中打開pg_hba.conf文件。 (它位於在/ etc /的PostgreSQL //主)

  2. 導航到讀取的行:

    # 「本地」 是用於Unix域套接字連接僅

和下面粘貼它:

local all   all     trust 

這將信任所有嘗試連接到本地計算機上的psql服務器的unix用戶。 (在閱讀有關列的功能的進一步信息頁面頂部文檔)

  1. 保存pg_hba.conf文件並退出文本編輯器。

  2. 重新啓動運行該命令的PostgreSQL服務器:

    服務的PostgreSQL重啓

  3. 現在嘗試,並通過運行啓動PSQL服務器:

    的psql -d -U(或 「PSQL」 )

  4. 您應該可以登錄沒有問題。

*注: 這一切假設您已經有在登錄一個有效的用戶名PSQL如果不按照下面的鏈接,設置一個:

建立一個用戶: http://erikonrails.snowedin.net/?p=274

確保你有一個有效的Postgres用戶: http://archives.postgresql.org/pgsql-novice/2002-08/msg00072.php

列出所有現有的psql用戶: 如果您AR e尋找「LIST USERS」或「DISPLAY USERS」命令,然後嘗試:

「select * from pg_user;」 (當登錄到psql時)

祝你好運!

+3

謝謝,但是這個問題已經被接受了......(問題只是我是愚蠢的> 。「此外,我不認爲」嘿,讓我們刪除所有安全性,讓所有本地用戶「解決方案是一個不錯的主意,尤其是當您與來自不同公司的許多其他用戶共享服務器時。 – 2012-02-13 08:53:30

+0

@m_x是對的。這有點像用火箭筒狩獵鳥類。當然你可以解決這個問題,但它會爲你解決其他問題。 – JaeGeeTee 2015-11-06 03:18:34

2

我有同樣的問題。在我的情況下,這是因爲在我的database.yml文件中,用戶名以大寫字母開頭,但在數據庫中全部爲小寫。

解決方案:從postgres命令行創建用戶時,它將所有字母轉換爲小寫。對於使用大寫字母,必須使用double quotes

例子:

create user AlbertEinstein; result = alberteinstein

VS

create user "AlbertEinstein"; result = AlbertEinstein

+0

哥們我愛你,那幫了我很多 – gilmishal 2015-04-08 17:36:27

0

以我爲例,我發現,在pg_hba.conf文件以後host許可規則線已超過纏身早先local一行。我是正確配置local線使用MD5認證,但host線被設置爲ident我改成md5

至於其他已經在這裏強調,注意使用trust是不安全的方法,所以你不應該使用它在任何生產型部署中。