0

我有一个 python 脚本,作为 tummy 的 memcached python 包装器的附加包装器。我有这样的事情:

class CacheIt(object):
  def __init__(self, host=<hostname>, port=11211, **kwargs):
    ...

我希望能够从我的 ini 文件中检索 memcached 主机名,但我不想指定哪个文件,因为它可能取自 development.ini 或 production.ini 或 test.ini。我需要当前ini文件的“查找”是动态的,这意味着应用程序应该知道当前的ini文件是什么,从而从设置中检索主机名。

我不能使用线程本地 get_current_request 并反过来检索设置文件,因为在应用程序启动时返回值为 None (我将我的类的实例附加到 NewRequest 事件)。

这:

from paste.deploy.loadwsgi import appconfig
config = appconfig('config:development.ini', 'myapp', relative_to='.')

不过,我需要先知道路径才能使用它。这意味着如果我使用它,我需要在每次部署时将 development.ini 的值更改为 production.ini,如果我进行测试则更改为 test.ini。当然,必须有更好的方法来做到这一点。

4

2 回答 2

0

不是最好的方法,但这里有一个想法。您必须将配置文件的路径保存在某处。

您甚至可以将配置文件的路径保存在配置文件中...

类似的东西:

config_file=%(here)s/development.ini

加载此文件时,将在config.registry.settings. 从那里你有两个选择。您可以像pid使用它一样编写一个文件,pid但使用您当前的设置文件。或者您可以创建一个 api 调用以从实时应用程序中查询设置。老实说,我会把它写在一个文件中。从应用程序查询设置似乎不太好。

然后您必须打开该文件并读取 file.ini 的路径,然后将其作为配置文件加载。

或者你可以尝试这样的事情:

ps -ax | egrep "`cat pyramid.pid`.*[s]tart" | cut -d" " -f14

从 python 运行时,您可以省略“cut”并自己从 python 中剪切它以获取配置 ini 文件。

换句话说,您将获得用于包含在 pyramid.pid 中的 pid 的命令行,该文件只会在守护程序模式下创建。当你有命令行时,你可以获得配置文件等等......缺点是它只适用于 pserve 或任何实际保存 PID 并使用配置作为参数的东西。如果您使用的是 uWSGI 等,则可能无法执行此类操作。

于 2012-08-20T12:20:25.477 回答
0

在您的事件 ( NewRequest) 中,您可以检索注册表以及其中的所有设置。

event.request.registry

将包含完整的注册表。


我的另一个建议是,您创建一个类的实例,并main()在其余配置完成后进行所有配置。这也是 SQLAlchemy 设置的工作方式。举个简单的例子,看看CouchDB 和 Pyramid的集成。Pyramid 和 .ini 配置中提供了相同的答案。ApplicationCreated如果您想在配置完成后但在发出任何请求之前立即设置内存缓存,您也可以附加到该事件。

于 2012-10-31T07:23:19.603 回答