1

我有一台由 Vagrant 管理的 VirtualBox 机器。在这台机器上,我运行一个 Django 开发 Web 服务器:

./manage.py runserver 0.0.0.0:8080

代码库很大,所以我安装了更快的代码重新加载pyinotify。Django 从 1.7 开始支持它。我用的是1.7。

代码库位于同步文件夹 (NFS) 中,我使用 Sublime 3 编辑主机 (OS X) 上的文件。

但是,inotify 不能很好地与 NFS 配合使用,并且代码自动重载不起作用。

如何在 VM 中重新启动开发服务器?

4

1 回答 1

1

我在开发服务器旁边运行了一个基本的 Web 服务器。这个简单的 Web 服务器侦听请求(在不同的端口上)并访问项目的 manage.py。这反过来又会触发重新启动:

重载器.py

#!/usr/bin/env python

import os
import logging
import SocketServer
from BaseHTTPServer import BaseHTTPRequestHandler

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(message)s',
                    datefmt='%m/%d/%Y %I:%M:%S %p')

PORT = 9001
FILE_TO_TOUCH = '/path/to/myenv/manage.py'


def touch(fname, times=None):
    with open(fname, 'a'):
        os.utime(fname, times)


class HandleTouch(BaseHTTPRequestHandler):
    def do_GET(self):
        logging.info("Touching %s", FILE_TO_TOUCH)
        touch(FILE_TO_TOUCH)
        self.send_response(200)
        self.send_header("Content-Length", '0')
        self.end_headers()


httpd = SocketServer.TCPServer(("", PORT), HandleTouch)

logging.info("Server listening on port %s", PORT)

httpd.serve_forever()

在主机上,我使用一个简单的 shell 命令来监视文件更改并点击重新加载器的端点:

观察者.sh

#!/bin/sh
watchmedo shell-command -c 'curl http://192.168.10.10:9001' -R -i '/path/to/myenv/manage.py' -p '*.py' ./

watchdogwatchmedo的实用程序在哪里。

于 2015-06-19T17:05:28.933 回答