Подтвердить что ты не робот

Как я могу получить бутылку для перезагрузки при смене файла?

Мне до сих пор нравится Bottle, но тот факт, что у меня есть CTRL + C на сервере и перезапустите его каждый раз, когда я делаю изменения кода, это большой удар по моей производительности. Я подумал об использовании Watchdog, чтобы отслеживать изменения файлов, а затем перезапускать сервер, но как я могу это сделать, когда bottle.run функция блокируется.

Запуск сервера из внешнего script, который следит за изменениями файлов, выглядит как много работы для настройки. Я думаю, что это была универсальная проблема для разработчиков Bottle, CherryPy и других разработчиков.

Спасибо за ваши решения проблемы!

4b9b3361

Ответ 1

Выделите из учебника раздел под названием "Автообновление"

Во время разработки вам необходимо перезагрузить сервер, чтобы проверить свои недавние изменения. Автоперегрузчик может сделать это за вас. Каждый раз, когда вы отредактируйте файл модуля, перезагружатель перезапустит процесс сервера и загрузит новейшей версии вашего кода.

Это дает следующий пример:

from bottle import run
run(reloader=True)

Ответ 2

С

run(reloader=True)

бывают ситуации, когда он не перезагружается, например, когда импорт находится внутри def. Для принудительной перезагрузки я использовал

subprocess.call(['touch', 'mainpgm.py'])

и он перезагружается в Linux.

Ответ 3

Используйте reloader=True в run(). Имейте в виду, что в окнах это должно быть под if __name__ == "__main__": из-за того, как работает модуль multiprocessing.

from bottle import run

if __name__ == "__main__":
    run(reloader=True)

Ответ 4

Эти скрипты должны делать то, что вы ищете.

AUTOLOAD.PY

import os
def cherche(dir):
    FichList = [ f for f in os.listdir(dir) if os.path.isfile(os.path.join(dir,f)) ]
    return FichList

def read_file(file):
    f = open(file,"r")
    R=f.read()
    f.close()
    return R

def load_html(dir="pages"):
    FL = cherche(dir)
    R={}
    for f in FL:
        if f.split('.')[1]=="html":
            BUFF = read_file(dir+"/"+f)
            R[f.split('.')[0]] = BUFF
    return R 

MAIN.PY

# -*- coding: utf-8 -*-

#Version 1.0 00:37


import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import datetime
import ast
from bottle import route, run, template, get, post, request, response, static_file, redirect

#AUTOLOAD by LAGVIDILO
import autoload
pages = autoload.load_html()




BUFF = ""
for key,i in pages.iteritems():
    BUFF=BUFF+"@get('/"+key+"')\n"
    BUFF=BUFF+"def "+key+"():\n"
    BUFF=BUFF+" return "+pages[key]+"\n"

print "=====\n",BUFF,"\n====="
exec(BUFF)


run(host='localhost', port=8000, reloader=True)