2012-12-02 73 views
1

我喜歡在開發環境中使用rake管理我的遷移,在那裏我允許我的rails應用對開發數據庫的完全權限。rake db:在分段和生產環境中安全遷移

但是,在暫存和生產環境中,我的應用程序只具有寫權限,而不能修改表。

我想繼續在舞臺和製作中使用rake db:migrate,但問題是rake db與我的rails應用程序使用相同的用戶,該應用程序沒有足夠的權限。

有誰知道解決這個問題的簡單方法,而不必在我的Rails應用程序中允許管理數據庫特權。

例如,如果我可以在運行rake db時指定-username-password,那會很好。

回答

2

你可以指定你的config/database.yml與用戶一些migration連接/傳爲正確特權用戶和運行

RAILS_ENV=migration rake db:migrate 

編輯它看起來像這樣的事情可能工作(雖然我從來沒有僅通過遠程連接對其進行測試)。將以下內容添加到您的config/database.yml

<% 
require 'highline/import' 

def request_input(msg, show_input = true) 
    ask(msg) { |q| q.echo = show_input } 
end 
%> 

migration: 
    # Other connection information here (host, adapter, etc..) 
    username: <%= request_input "Username:" %> 
    password: <%= request_input "Password:", false %> 

當您運行

RAILS_ENV=migration rake db:migrate 

系統將提示您輸入用於連接的用戶名和密碼。請務必添加

gem 'highline' 

到您的Gemfile

來源:http://dzone.com/snippets/request-database

+0

我沒有想到這一點,但是,問題是,根級別分貝的認證信息是坐在一個未加密的文本文件。如果可能,我想避免這種情況。 –

+0

高線解決方案在生產中工作得很好。謝謝!有趣的是,它要求輸入用戶名和密碼兩次,但我並沒有抱怨 - 這是對我們之前所做的大大改進:-) –