2014-01-10 8 views
0

我有一個正在處理的金字塔應用程序。理想情況下,我需要能夠將sqlalchemy url設置放入單獨的文件中,然後在engine_from_config文件中使用此文件。默認情況下,pserve只是使用.ini文件,您可以指定調用main()方法,如:對隱藏密碼的sqlAlchemy網址使用單獨的PasteDeploy文件

def main(global_config, **settings): 
    """ 
    This function returns a Pyramid WSGI application. 
    """ 

我將如何使用第二個ini文件針對存儲在同一目錄中development.ini文件設置?例如:development_database.ini

二:數據庫用戶名有很神祕的密碼,包含百分比%和括號(等ConfigParser似乎並不喜歡這個,我不知道一個簡單的方法來逃避。有沒有辦法解決這個問題?我不想讓我們的DBA必須更改密碼。

+0

要在.ini文件中使用百分比,您可以應用https://bitbucket.org/ianb/pastedeploy/issue/11/there-is-no-way-to-escape-character-in- – sayap

回答

2

看到你將努力使密碼變得神祕,最好將它們存儲爲環境變量,並使它們完全脫離源代碼控制,這也避免了使用ConfigParser。

SQLAlchemy的engine_from_config函數接受ar bitrary關鍵字ARGS,並把這些完全一樣,它的任何從development.ini文件

所以需要的參數,如果我有這在我的系統shell(在我的情況的bash):

export DB_URL=postgresql+psycopg2://user:[email protected]:5432/mydb 

我的金字塔代碼看起來是這樣的:

import os 

db_url = os.environ['DB_URL'] 

def main(global_config, **settings): 
    engine = engine_from_config(settings, 'sqlalchemy.', url=db_url) 
    … 

的engine_from_config功能將與來自development.ini文件前綴「SQLAlchemy的。」所有的參數,並把我的db_url爲所有重要的「URL」參數。

編輯

對不起,我意識到我並沒有真正回答這個問題的第一部分。使用多個PasteDeploy文件的最巧妙的方法是用一用:指令:

[app:main] 
use=config:another_config_file.ini 
… 

這很好這裏記載:http://pythonpaste.org/deploy/#config-uris

通過這種方式,你可以「鏈」的.ini文件,但他們還是贏了對你的隱祕密碼沒有幫助 - 因爲你需要我的答案的前半部分解釋的環境變量。

+0

我忘了接受這個!對不起。 config:another_file.ini指令也非常有幫助。 :) –

+0

非常好!感謝接受;我很高興它有用。 – Stephan