0

我已经像这样设置了 Pyramid 配置文件:

[app:main]
...

[server:main]
...


[memcache]
# memcache config

[zeromq]
# zeromq xonfig

现在在我的里面app_factory,我想得到所有的配置——不仅仅是这个app:main部分,还有memcache,zeromq和其他可能的部分。

我该怎么做。

我将配置分成不同部分的原因是因为我的应用程序使用了许多不同的服务,我不想将所有配置拼凑到该app:main部分中。

一种方法是通过读取配置文件手动将配置拉入应用程序。然后你必须以某种方式知道应用程序正在运行什么模式(开发或生产)。此外,还有多次解析配置的开销(因为 paste-deploy 将首先执行此操作)。

有没有更好,更优雅的解决方案?

4

2 回答 2

2

不幸的是,如果您想采用这种方法,您将不得不再次解析配置文件。您可以通过config_file = global_config['__file__']in获取文件main并使用 stdlib 自行解析ConfigParser

如果您喜欢这种带有单独部分的 INI 格式,Mozilla 服务有一个不错的小模块,您可以使用它来为您处理所有这些。它进行值转换(尝试将值转换为整数或布尔值)。它支持使用其他部分扩展您的配置,例如[foo:bar] key = value,在解析时将返回一个包含settings['foo.bar.key'] == value. 它还将方便地为您解析内容,因此您的 main 看起来像:

def main(global_config, **settings):
    config = get_configurator(global_config, **settings)
    settings = config.registry.settings
    # ... do your app configuration
    return config.make_wsgi_app()

https://wiki.mozilla.org/index.php?title=Services/Sync/Server/GlobalConfFile https://github.com/mozilla-services/mozservices/blob/master/mozsvc/config.py

于 2013-03-08T08:30:33.073 回答
0

您可以将特定于应用程序的配置传递到 ini 文件中:

[app:xyz]
    something = True

然后在您的main功能(应用程序工厂)中,您可以访问它

settings['something']

更多信息:

http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting

于 2013-03-12T12:37:10.793 回答