【问题标题】:Is there a way to share common configuration using Paste Deploy?有没有办法使用粘贴部署共享通用配置?
【发布时间】:2013-08-28 11:11:36
【问题描述】:

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

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

我对在 python 或 ini 文件/节(或者可能是第三个尚未考虑的地方)中发生这种情况持开放态度。我认为这相当于使用 [DEFAULT] 部分,或通过global_conf 将字典传递给loadapp,但这似乎是以一种松鼠的方式处理的。例如,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 以编程方式执行此操作?

【问题讨论】:

  • 所以,我认为我不能只使用 (...) 不要猜测 - 试试吧。
  • 为了清楚起见,我确实尝试了很多东西。 “不要思考”适用于一般方法,我可能还没有完全理解。你的评论很烦人。

标签: python pyramid web-deployment paste


【解决方案1】:

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

如果您认为某事很奇怪并且您正在询问 SO,最好显示堆栈跟踪和您尝试执行的操作的示例。

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

【讨论】:

  • 太棒了。在这种特殊情况下,我尝试了很多不同的方法来处理事情,以至于我很难将其包含在一个特定的示例/堆栈跟踪中。尽管我在这里有缺点,但这听起来是正确的。谢谢,我会报告这是否能让我走完剩下的路!
  • 只要所有应用程序都定义在同一个ini文件中,就可以通过[DEFAULT]部分共享设置,对吗?是否可以在一个 ini 文件中包含通用设置,并从特定于应用程序的单独 ini 文件中引用/包含这些设置?
  • 那么您只会得到一个默认部分。因此,如果A.ini 中的应用程序部分继承自另一个名为B.ini 的文件中的部分,则不考虑B.ini 中的默认部分。至少我是这么理解继承部分的(它只在部分基础上起作用)。
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 2019-10-01
相关资源
最近更新 更多