如何在修改文件时重新启动虚拟机中的Django开发web服务器?
我有一台由流浪汉管理的VirtualBox机器。在这台机器上,我运行Django开发web服务器:如何在修改文件时重新启动虚拟机中的Django开发web服务器?,django,vagrant,virtualbox,pyinotify,django-dev-server,Django,Vagrant,Virtualbox,Pyinotify,Django Dev Server,我有一台由流浪汉管理的VirtualBox机器。在这台机器上,我运行Django开发web服务器: ./manage.py runserver 0.0.0.0:8080 代码库很大,为了更快地重新加载代码,我安装了pyinotify。Django从1.7开始就支持它。我用的是1.7 代码库位于一个同步文件夹(NFS)中,我正在使用Sublime 3编辑主机(OS X)上的文件 但是,代码自动加载不起作用 如何在VM中重新启动开发服务器?我有一个基本的web服务器在开发服务器旁边运行。这个简单的
./manage.py runserver 0.0.0.0:8080
代码库很大,为了更快地重新加载代码,我安装了pyinotify
。Django从1.7开始就支持它。我用的是1.7
代码库位于一个同步文件夹(NFS)中,我正在使用Sublime 3编辑主机(OS X)上的文件
但是,代码自动加载不起作用
如何在VM中重新启动开发服务器?我有一个基本的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命令监视文件更改并点击重新加载程序的端点:
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
是来自的实用程序