【问题标题】:How can I reload pserve when a template changes?模板更改时如何重新加载 pserve?
【发布时间】:2014-05-23 15:31:38
【问题描述】:

我有 pserve --reload 可以处理任何 python 更改,但是当我更改模板时我仍然需要手动重新加载。

我制作了这个小脚本来监视我的模板文件夹是否有任何更改,但是重新加载 pserve 的命令是什么?如果我需要从我的 Pyramids 项目中调用 pserve 方法,例如在 init.py 或其他什么中,我会调用什么方法来重新加载 pserve?

#!/usr/bin/env python
import sys
import pyinotify
from subprocess import call
import time

wm = pyinotify.WatchManager()
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE | pyinotify.IN_MODIFY

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_MODIFY(self, event):
        print "Modified: ", event.pathname

        # This is where my reload call would go...            
        # call(["pserve", "reload"])

handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch("/path/to/my/pyramid/templates/", mask, rec=True, auto_add=True)

notifier.loop()

【问题讨论】:

  • 添加代码,展示如何将 jinja2 金字塔环境设置到金字塔配置器对象(your_project.__init__.py 和示例 *.ini PasteDeploy 文件)

标签: python pyramid pyinotify


【解决方案1】:

Pyramid 已经提供了一种无需重新启动 pserve 即可重新加载模板的方法,方法是将此类配置放入 PasteDeploy development.ini 文件或使用环境变量。见Environment Variables and .ini File Settings。当然,不要在生产中启用模板重新加载,因为它会减慢您的应用程序。

【讨论】:

  • 很奇怪。我将 pyramid.reload_templates 设置为 true,但是当我对我的 jinja2 模板进行更改时,pserve 不会重新加载。看起来应该是这样的:docs.pylonsproject.org/projects/pyramid-jinja2/en/latest
  • pserve 在模板更改时不会重新加载整个过程;只有在 Python 文件更改时才需要这样做。但是,如果 pyramid.reload_templates 为真,您对文件所做的更改将立即反映。
  • 所以这在我的工作环境中实际上并没有起到作用,但是我在家里的一台机器上安装了 pyramid 和 jinja2 并且它起作用了。我会在工作中更多地研究这个问题。感谢您的帮助。
【解决方案2】:

顺便说一句 - 很好的解决方法脚本。史蒂夫是对的,金字塔提供了开箱即用的功能。但金字塔内置看门狗行为也取决于您的配置。 Including pyramid_jinja2 进入您的金字塔项目会触发金字塔中的许多内容,并对模板文件扩展名 (*.jinja2) 做出一些假设。

pyramid_jinja 提供模板重新加载的配置 - 它也可以是enabled/disabled。从金字塔 1.5 开始(你使用它吗?)你也可以使用设置 `pyramid.reload_templates'。

但你能做的最好的事情是try the pyramid scaffold that uses jinja2 templates。设置需要 5 分钟,然后更改 jinja2 模板并查看金字塔是否正在重新加载。如果金字塔正在重新加载,正如我所料,您可以继续调试当前应用程序的问题。

【讨论】:

  • 优秀的输入。非常感谢。它给了我一些可以深入挖掘的东西。我安装了 pyramid_jinja2,但从未为它运行 setup.py。我刚刚更新了我的 development.ini 和 MINIFEST.in 文件,所以我可以使用 jinja2 模板。我将在星期一运行 setup.py 并比较差异。周一我会将其中一个标记为“已回答”。
【解决方案3】:

确保您将配置对象设置为也接受 development.ini 中的设置。像 config = Configurator(settings = settings)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 2012-03-19
    • 2017-04-25
    • 2023-02-11
    • 2013-10-05
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多