2011-08-17 49 views
16

目前我得到以下錯誤:在Windows上安裝的Postgres爲使用的Ruby-on-Rails的

PGError (FATAL: password authentication failed for user "postgres"):

當我的應用程序試圖訪問數據庫

我想測試我的SQL調用對抗postgres作爲我的應用程序常規休息時推動生產在Heroku上,因爲postgres(我認爲這可能是一個健康的事情)對sqlite 3的更嚴格的要求。所以我有一個類似的請求to this爲安裝postgres用於在軌道上的紅寶石(7)請不要過時教程。我認爲這將是一個快20分鐘的下載和安裝,但2和一個小時後,我覺得我還沒有非常接近。到目前爲止,我:

下載並安裝的Postgres版本8.4.8-1 from here

設置我的環境變量使得(用戶)路徑爲:C:\Ruby192\bin;C:\Program Files (x86)\PostgreSQL\8.4\bin

的Gemfile:

gem 'pg', '0.11.0' # instead of gem 'sqlite3', '1.3.3' 

bundle install爲我的rails應用程序似乎成功,但還沒有找到簡單的方法來驗證安裝。

集的database.yml as suggested here到:

development: 
    adapter: postgresql 
    database: db/development 
    username: postgres 
    password: secret 
    host: localhost 
    encoding: UTF8 
    pool: 5 
    timeout: 5000 

我知道我需要set up a user name and password for Postgresmaybe also start the postgres server, connect to it(?),放在我的本地IP地址,我將連接到它into a config files somewhere,然後編輯其他的.conf之一文件在'C:\ Program Files文件(x86)\ PostgreSQL \ 8.4 \數據'等...

我覺得Rails讓我變得柔軟,我是在思考事情還是它實際上是相當棘手的設置和我應該回到Sqlite3,爲此還有非常有用的SQLite Manager,Firefox插件?

我還在尋找一個初學者指南,安裝和使用的Postgres的軌道,但到目前爲止只得到了大部分的東西,我看糊塗/嘗試以下類似thisthisthisthisthis(用於Snow Leopard),this(linux)。

任何指針將不勝感激。謝謝!

詹姆斯

+0

我只是從HTTPS安裝PostgreSQL的://postgrespro.com/windows,所有其他設置 - 常用的方法。 – prograils

回答

67

一種在Windows 7上安裝Postgres以用作Rail 3(3.0.7)項目的PostgreSQL數據庫的方法。


序言(你可以跳過此位)

所以要指出的第一件事是,Postgres的不只是從.sqlite3文件擴展名不同,它是一個整體的管理機制你的數據庫。因此,它有一個客戶端/服務器模型,其中您需要設置爲使用Postgres作爲您的Rails應用程序的數據庫。

Postgres設置與幾乎毫不費力的sqlite設置相比經歷了相當大的痛苦:如果你部署到Heroku,他們目前使用Postgres,所以你使用Postgres時sqlite3上的一些SQL調用會中斷。在本地調試postgres比在Heroku的服務器上調試要容易得多。

所以我做了以下事情: (免責聲明:我可能忘記包括我所做的一些事情......我花了48個多小時的痛苦纔開始工作...... if下面的建議對你不起作用,然後巨大的(2300頁!!),但very thorough Postgres documentation應該有幫助。如果你認真使用Postgres,我建議下載這個,因爲它有很多材料,我只有(第二個免責聲明:我幾乎可以肯定地打破了20個明智的Postgres準則並暴露了Postgres數據庫中的安全漏洞,如果有經驗的Postgres用戶不同意任何明顯的事情,請編輯我的)


。步驟1.下載,然後從here因爲here說,只有9.0.x將在Windows 7支持我保持所有默認選項,只用於「祕密」作爲密碼安裝PostgreSQL v9.0.4-1當Postgres的安裝人員提示你時(我不確定在互聯網上共享這些信息的後果是什麼......很快就會發現我確信)。你會在步驟需要使用此密碼3.

。步驟2.更改環境變量,使得路徑(for system, not user(我不知道這是顯著與否))爲:C:\Program Files\PostgreSQL\9.0\bin
(注:我因此它不會被安裝在'C:\ Program Files(x86)\ PostgreS ...'中的32位中)'

不要忘記將訪問權限更改爲文件夾PostgreSQL \ 9.0並刪除文件夾或內容的所有默認只讀權限。 (您可能還需要重新啓動計算機才能生效 - 感謝@Gavin - 儘管不太可能)。

。步驟3.測試Postgres的安裝,試圖創建一個新的數據庫: 從命令行:createdb -U postgres mydb_as_postgres。 現在應該提示你輸入密碼,如果你不是,可能需要先啓動服務器(我不記得是否需要這樣做)。最簡單的方法是通過pgAdmin III,它應該是位於C:\Program Files\PostgreSQL\9.0\bin之類的文件夾中的「pgAdmin3.exe」。一旦你開始pgAdmin III,左側應該有一個名爲「對象瀏覽器」的面板。在此應該有一棵樹:

服務器組>服務器> PostgreSQL 9。0(localhost:5432)

右鍵單擊'PostgreSQL 9.0(localhost:5432)'並選擇'連接'。

createdb -U postgres mydb_as_postgres命令應創建一個名爲'mydb_as_postgres'的新數據庫,您可以通過啓動pgAdmin III並雙擊'PostgreSQL 9.0(localhost:5432)'來檢查該數據庫。在這裏面應該是:

Databases (2)這應該列出2個數據庫稱爲mydb_as_postgrespostgres

我把它叫做_as_postgres,因爲該命令的-U postgres部分告訴Postgres的創建與Postgres的用戶數據庫作爲它的主人,這您需要指定何時未以postgres用戶身份登錄。我將所有的文件都存儲爲'AJames'用戶,但如果您是相同的,並且希望繼續開發您的應用程序,並以不同的用戶身份登錄時,您需要爲該用戶創建一個Postgres'角色'(請參閱步驟4)。

。步驟4通過pgAdmin III。右鍵單擊登錄角色(這對我來說是):

對象瀏覽器>服務器組>服務器>的PostgreSQL 9.0(本地主機:5432)>登錄角色

右鍵單擊登錄角色並選擇「新建登錄角色...' 在角色名稱中,放入您的操作系統用戶名,對我來說是AJames, 並在'角色權限'選項卡下填寫您的密碼,我檢查了所有框,但是有經驗的postgres用戶可能會強烈建議只檢查'從父角色繼承權限'和'可以創建數據庫對象'但我不是一個有經驗的用戶,只是想在Postgres中調試Rails SQL調用,所以我也檢查了'超級用戶'和「可以創建角色」,以防萬一。

。步驟5.您現在應該可以創建新的數據庫,而無需以postgres用戶身份登錄。試着輸入:

createdb mydb_as_user

這應該可以爲你工作。

。步驟6.好的,所以你的rails'db /'目錄下有一個development.sqlite3文件。最初我將設置下一個測試,將其從sqlite3轉換爲psql。
雖然我無法得到這個工作,但我留下了我的嘗試,因爲我使用的解決方案需要在Heroku.com上的Rails應用程序中使用數據(請參閱第7步之後的解決方案)。對於那些只有本地應用且Heroku中沒有數據的用戶,他們不能使用相同的方法,因此他們可能需要探索如下內容:

x6.1首先,通過嘗試命令測試'psql'從喜歡你的命令行:

psql mydb_as_user

這應該顯示類似下面(您以後在您輸入密碼):

C:>psql mydb_as_user 
Password: 
psql (9.0.4) 
WARNING: Console code page (850) differs from Windows code page (1252) 
     8-bit characters might not work correctly. See psql reference 
     page "Notes for Windows users" for details. 
Type "help" for help. 

mydb5=# 

5233。2嘗試輸入:

CREATE TABLE users_table (id integer, "name" text);

它應該顯示:

CREATE TABLE 
mydb5=# 

如果你的pgAdmin III檢查,你應該看到桌子上有下:

對象瀏覽器>服務器組>服務器> PostgreSQL 9.0(localhost:5432)>數據庫> mydb_as_user> Schema> public> Tables> users_table>

x6.3好吧,緊跟t ry轉換。 Downloaded sqlite-shell Windows預編譯二進制文件。
x6.4創建一個新目錄,我使用'C:\ temp'並將sqlite3.exe和您的development.sqlite3文件放入其中。
x6.5使用以下命令(這些命令來自here)將development.sqlite3數據庫轉儲到Postgres中。

sqlite3 development .dump | psql development2

你可能會得到這樣的錯誤:讓我去到的pgAdmin III,並提出了發展2數據庫,再次試圖命令並得到

psql: FATAL: database "development2" does not exist

x6.6:

ERROR: syntax error at or near "PRAGMA" 
LINE 1: PRAGMA foreign_keys=OFF; 
     ^
BEGIN 
COMMIT 

就像我說的,我無法得到它的工作。我確信有一種方法可以避免這種錯誤,但我想到了一種不同的方式,所以我使用了這種解決方案(它需要一個Heroku帳戶來獲取您的數據,並使用Taps gem(I)執行從sqlite3到psql的轉換。相信):

步驟7.在pgAdmin III中我創建了另一個數據庫,在屬性選項卡下我設置了name:'development',owner:'AJames'(用你自己的Windows用戶名替換它)。權限選項卡下,設置角色:「公共」和檢查(認爲這重置爲未選中狀態,所以我不知道這是必要的)ALL選項

。步驟8添加 。 10 到你的寶石文件。在這一點上,你可能也想刪除: gem 'sqlite3'

。步驟9.集的database.yml爲suggested here到:

development: 
    adapter: postgresql 
    database: db/development 
    username: AJames # replace this with your own user name 
    password: secret # replace this with your own password 
    host: localhost 
    encoding: UTF8 
    pool: 5 
    timeout: 5000 

如果您正在使用一個開源的項目,並不希望被公之於衆您的密碼,看看在某些Securely providing the database password in a Rails app的答案。

。步驟10.在命令行中你的Rails應用程序的根目錄下運行: rake db:migrate 這將創建一個新的架構和Postgres數據庫中的所有表。

。步驟11。從您的命令行運行heroku db:pull(再次從您的rails應用程序的根目錄中)將您的所有數據拉下並放入新的空Postgres數據庫。我認爲在這一點上你的水龍頭寶石將爲你做這項工作。


。步驟12.希望沒有步驟12! ...現在它應該爲你工作。快樂的RoR PostgreSQL調試!請編輯或讓我知道,如果有任何錯誤。

而且,這裏有更多的東西的清單,可能是有趣/有用:

+1

只是想補充說,在步驟2中更改環境變量後,您需要重新啓動計算機。註銷並返回可能也會起作用,但無論如何我需要重新啓動,所以這就是我所做的。 – Gavin

+2

真棒帖子。幫助我了很多:) – Ajay

+0

我在Windows 7 64x和Rails 4.2.4上運行Postgres 9.5,這工作正常 – Matthias

2

你的鏈接都不似乎是(可以說)最有用的文檔 - official PostgreSQL的文檔。我最近使用這些文檔和these組合了postgresql和django來配置一個Linux Mint盒子,儘管後者特定於Linux。

我擔心更多關於確認事情的postgresql方面,而不是關於rails。也就是說,你的問題應該是「我如何在Windows 7上設置和測試postgresql服務器」,而不是你需要知道如何將它鎖定在rails中。

編輯: 也許this也可能對您有用 - 官方postgresql維基與詳細的安裝指南。

祝你好運!

+0

謝謝里諾。這些鏈接看起來好像是一個更好的方向。我會回頭看看我如何繼續。 (很好,http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#What_versions_of_Windows_does_PostgreSQL_run_on.3F已經告訴我,我有錯誤版本的postgres,因爲8.4在Windows 7之前發佈了......感謝Reno!:)) – AJP

+0

很高興我能幫上忙! – Reno

2

從AJP的答案是正確的只有一個小的重新配置。 該行

database: db/development 

不適用於我。 我

database: development 

我用這個Ruby on Rails的該命令將其更改爲

rake db:create 

rake db:migrate 

工作