有没有办法使用Paste Deploy共享通用配置?

时间:2013-08-27 18:35:46

标签: python pyramid web-deployment paste

这在概念上是一个非常简单的想法。在细节方面,我正在使用一个非常通用的Kotti安装,我正在定制一些页面/模板。

我的大部分配置都是在生产和开发服务器之间共享的。目前,这些设置包含在两个单独的ini文件中。干这个配置会很好,在一个地方有常见的设置。

我对python或ini文件/部分(或者可能是第三个尚待考虑的地方)发生这种情况持开放态度。我认为这相当于使用[DEFAULT]部分,或通过loadapp将字典传递给global_conf,但这似乎是以一种松散的方式处理。例如,Kotti认为我已正确设置sqlalchemy.url,但sqlalchemy iteself在url = opts.pop('url')上失败。此外,由于Kotti定义了一些默认设置,因此Paste不会最终在global_conf中搜索它们(例如,kotti_configurators)。

喜欢传递%(var)s替换的大型字典的想法,因为它需要有效地重命名所有共享变量。

在我最初的Paste Deploy实验中,它要求每个ini文件中都有一个“主”部分。所以,我认为我不能只使用use = config:shared.ini行。但这在概念上接近我想做的事情。

有没有办法明确(并且正确)包含DEFAULT或global_conf的设置?或者也许用loadthon的结果以编程方式执行此操作?

1 个答案:

答案 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()