2013-08-27 97 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'中的默认部分。至少这就是我对继承部分的理解(它只适用于部分)。 –

相关问题