3

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

我的大部分配置在生产服务器和开发服务器之间共享。目前,这些设置包含在两个单独的 ini 文件中。DRY 这种配置会很好,在一个地方使用通用设置。

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

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

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

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

4

1 回答 1

4

例如,Kotti 认为我已经正确设置了 sqlalchemy.url,但是 sqlalchemy 本身在 url = opts.pop('url') 上失败了。

如果您认为某些事情很奇怪并且您正在询问 SO,那么明智的做法是显示堆栈跟踪和您尝试做的事情的示例。

Kotti 的设置与任何金字塔应用程序相同。您的入口点(def main(global_conf, **settings)通常)通过global_confandsettings字典。然后,您负责修复它并将其改组到配置器中。

由于各种原因,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()
于 2013-08-28T03:11:36.563 回答