我有一个由Vagrant管理的VirtualBox机器。在这台机器上,我运行了一个Django开发Web服务器:
./manage.py runserver 0.0.0.0:8080
代码库很大,所以我安装了pyinotify
更快的代码重新加载。 Django从1.7开始就支持它。我正在使用1.7。
代码库位于同步文件夹(NFS)中,我使用Sublime 3编辑主机(OS X)上的文件。
但是inotify doesn't go well with NFS和代码自动重载不起作用。
如何在VM中重新启动开发服务器?
答案 0 :(得分:1)
我在开发服务器旁边运行了一个基本的Web服务器。这个简单的Web服务器侦听请求(在不同的端口上)并触及项目的manage.py。这反过来会触发重启:
<强> reloader.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命令来监视文件更改并点击重新加载器的端点:
<强> watcher.sh 强>
#!/bin/sh
watchmedo shell-command -c 'curl http://192.168.10.10:9001' -R -i '/path/to/myenv/manage.py' -p '*.py' ./
其中watchmedo
是来自watchdog的实用程序。