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 にアクセスします。これにより、再起動がトリガーされます。

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()

ホスト マシンでは、簡単なシェル コマンドを使用してファイルの変更を監視し、リローダーのエンドポイントにアクセスします。

watcher.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 に答える