2012-10-28 115 views
1

Rails/PostgreSQL新手在這裏遇到了實際的問題,在Rails中創建PostgreSQL項目。Rake在postgresql遷移期間中止

簡而言之,我遵循Ryans優秀的Railscast情節,特別是關於部署的情節。我創建了一個新的項目是這樣的:

rails new blog -d postgresql 

這生成一個database.yml文件類似於以下(提取評論):

development: 
    adapter: postgresql 
    encoding: unicode 
    database: blog_development 
    pool: 5 
    username: blog 
    password: 

test: 
    adapter: postgresql 
    encoding: unicode 
    database: blog_test 
    pool: 5 
    username: blog 
    password: 

production: 
    adapter: postgresql 
    encoding: unicode 
    database: blog_production 
    pool: 5 
    username: blog 
    password: 

看起來好爲止。

但是,我的機器上,每當我嘗試運行rake db:create:all,我得到一個消息類似以下內容:

rake aborted! 
FATAL: role "blog" does not exist 

我的理解是,這是因爲我還沒有(或者說, Rails在創建應用程序時沒有創建一個名爲「blog」的用戶。因此,我需要:

  1. 更改username適用於所有環境到我的系統的「超級 用戶」我當我安裝自制軟件(工作)選擇;或
  2. 爲我設置的每個單獨項目創建一個新的超級用戶(例如,在本例中爲 超級用戶「博客」)。

現在,問題是這樣的 - 我應該爲每個創建的項目創建一個超級用戶嗎?如果是這樣,怎麼樣?我問的原因是Ryan的Railscasts事件從來沒有提到這一點,所以我不確定這是否是正確的方法(看起來有點冗長),或者如果我的PostgreSQL數據庫安裝有問題(因爲我認爲在創建應用程序時超級用戶會自動與數據庫一起設置)。

此外,爲了使部署更容易,我希望在開發和生產環境中保持整個database.yml文件相同(儘管我承認對部署知之甚少,所以也許這不是很理想)。

謝謝!

回答

1

創建數據庫用戶是由您決定的。 Rails不會創建數據庫用戶。

根據您的平臺,您可以使用某種數據庫管理GUI來更輕鬆地創建用戶並管理其權限。我使用PGAdmin,它隨PostgreSQL的Mac OS X可執行文件提供。它也可用於其他平臺。

在開發中,許多人對所有項目都使用相同的「超級用戶」。在製作過程中,我會建議您以最小權限讓特定於應用程序的用戶。

我並不完全理解關於database.yml的最後一段在dev和prod中是一樣的,因爲這正是關鍵 - 所有環境都是一個文件。你可能不應該使用相同的證書進行開發和生產。

+0

謝謝Jesper。我傾向於在開發模式下使用我的「本地」用戶名來開發和測試環境。我打算在服務器數據庫上設置一個單獨的生產用戶,但是當我運行db:migrate local時,它不會在本地機器上找到用戶,因此它會拋出錯誤消息(我認爲)。我是否應該在本地設置一個「生產」超級用戶,並使用與服務器上的超級用戶相同的憑據? – Graeme

+1

關於超級用戶:在您的本地機器上,爲了簡化和加速開發,您可以使用超級用戶帳戶作爲您的數據庫角色。在製作時,建議您不要使用超級用戶帳戶作爲Rails用來訪問數據庫的帳戶。因此,某種程度上,超級用戶超出了本次討論的Rails範圍。看起來很清楚,接下來你需要做的是閱讀PG中的用戶/角色,然後在本地機器上創建適當的角色。 – Jesper

+0

謝謝,好點。 – Graeme