【问题标题】:Retrieving current Pyramid ini settings from a python script从 python 脚本中检索当前 Pyramid ini 设置
【发布时间】:2012-08-15 03:07:02
【问题描述】:

我有一个 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。当然必须有更好的方法来做到这一点。

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

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

    event.request.registry
    

    将包含完整的注册表。


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

    【讨论】:

      【解决方案2】:

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

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

      类似的东西:

      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 等,则可能无法执行此类操作。

      【讨论】:

      • 脚本正在启动不同的进程,还是正在将自己附加到当前服务器?
      • 不知道怎么说。它只是一个单独的脚本,无法访问请求或配置参数。这个脚本实际上是 Tummy 的 memcached python 包装器之上的一个包装器。
      猜你喜欢
      • 2011-11-26
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      相关资源
      最近更新 更多