2013-08-27 64 views
2

這在概念上是一個非常簡單的想法。根據具體情況,我正在使用一個非常通用的Kotti安裝,我正在定製一些頁面/模板。有沒有辦法使用粘貼部署共享公共配置?

我的大部分配置都是在生產和開發服務器之間共享的。目前,這些設置包含在兩個獨立的ini文件中。幹這個配置會很好,在一個地方使用常用設置。我很開放這種情況發生在Python或一個ini文件/部分(或者可能是第三個,尚未考慮的地方)。我認爲這相當於使用[DEFAULT]部分,或通過global_conf將字典傳遞到loadapp,但似乎以松鼠方式處理。例如,Kotti認爲我已經正確設置了sqlalchemy.url,但是sqlalchemy iteself在url = opts.pop('url')上失敗。而且,由於Kotti定義了一些默認設置,因此Paste不會在global_conf中搜索它們(例如,kotti_configurators)。

不要想傳遞%(var)s替代的大字典,因爲它需要有效地重命名所有的共享變量。

在我最初的Paste Deploy實驗中,它需要在每個ini文件中設置一個「main」部分。所以,我不認爲我可以只使用use = config:shared.ini行。但是這在概念上接近我想要做的事情。

有沒有一種方法可以明確(並正確地)包含來自DEFAULT或global_conf的設置?或者也許用python對loadapp的結果進行編程?

+0

*所以,我不認爲我可以只使用(...)*不要猜測 - 只是嘗試。 –

+0

只是要清楚,我確實嘗試了很多東西。 「不認爲」適用於我可能尚未完全理解的一般方法。你的評論很煩人。 –

回答

3

例如,Kotti認爲我已經正確設置了sqlalchemy.url,但是sqlalchemy iteself在url = opts.pop('url')上失敗。

如果您認爲某些事情很奇怪,並且您在問這個問題,那麼展示一個堆棧跟蹤以及您嘗試做什麼的示例是明智的。

Kotti的設置與任何金字塔應用程序相同。您的入口點(通常爲def main(global_conf, **settings))通過global_confsettings字典。然後你負責解決這個問題,然後把它洗到配置器中。

由於各種原因,PasteDeploy保持global_conf獨立於設置,因此如果您願意,您有責任合併它們。

[DEFAULT] 
foo = bar 

[app:main] 
use = egg:myapp#main 
baz = xyz 

def main(global_conf, **app_settings): 
    settings = global_conf 
    settings.update(app_settings) 
    config = Configurator(settings=settings) 
    config.include('kotti') 
    return config.make_wsgi_app() 
+0

太棒了。在這種特殊情況下,我嘗試了很多不同的方法來處理事情,因此我很難將它包裝在一個特定的示例/堆棧跟蹤中。儘管這裏有我的缺點,但這聽起來像是正確的道路。謝謝,我會報告這是否讓我休息! –

+0

只要所有應用程序都在同一個ini文件中定義,就可以通過'[DEFAULT]'部分共享設置,對吧?是否有可能在一個ini文件中具有通用設置,並引用/包含來自應用程序特有的單獨ini文件的這些設置? –

+0

那麼你只能得到一個默認部分。因此,如果'A.ini'中的應用程序部分繼承自另一個名爲'B.ini'的文件中的部分,則不考慮'B.ini'中的默認部分。至少這就是我對繼承部分的理解(它只適用於部分)。 –

相關問題