2

我有 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()
4

3 回答 3

6

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

于 2014-05-23T20:15:30.717 回答
1

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

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

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

于 2014-05-24T11:30:35.900 回答
1

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

于 2014-06-04T17:56:32.600 回答