2012-06-12 20 views
24

मैं वास्तव में Bottle का आनंद ले रहा हूं, लेकिन तथ्य यह है कि मुझे सर्वर से CTRL + C करना है और जब भी मैं कोड बदलता हूं, इसे पुनरारंभ करना मेरी उत्पादकता पर एक बड़ी हिट है। मैंने सर्वर को पुनरारंभ करने के बाद फ़ाइलों को ट्रैक करने के लिए Watchdog का उपयोग करने के बारे में सोचा है, लेकिन bottle.run फ़ंक्शन अवरुद्ध होने पर मैं यह कैसे कर सकता हूं।फ़ाइल परिवर्तन पर पुनरारंभ करने के लिए मुझे बोतल कैसे मिल सकती है?

फ़ाइल परिवर्तनों के लिए देखे गए बाहरी स्क्रिप्ट से सर्वर को चलाने से लॉट सेट अप करने के लिए काम लगता है। मुझे लगता है कि यह बोतल, चेरीपी और आदिटर डेवलपर्स के लिए एक सार्वभौमिक मुद्दा था।

इस मुद्दे के आपके समाधान के लिए धन्यवाद!

उत्तर

38

चेक बाहर ट्यूटोरियल से एक वर्ग "Auto Reloading"

हकदार विकास के दौरान, आप सर्वर आपके हाल के परिवर्तन का परीक्षण करने के लिए एक बहुत पुनः आरंभ करना। ऑटो रीलोडर यह आपके लिए कर सकता है। प्रत्येक बार जब आप मॉड्यूल फ़ाइल संपादित करते हैं, तो पुनः लोडर सर्वर प्रक्रिया को पुनरारंभ करता है और आपके कोड का नवीनतम संस्करण लोड करता है।

यह निम्न उदाहरण देता है:

from bottle import run 
run(reloader=True) 
+0

ओह, शांत! क्या ऐसी कोई परिस्थिति है जिसमें यह मॉड्यूल को फिर से लोड करने में विफल रहेगा? मुझे लगता है कि यह सभी आयातित मॉड्यूल देखता है – Hubro

+0

दुर्भाग्यवश मेरे पास एक तरफ या दूसरे कहने में सक्षम होने के लिए पर्याप्त अनुभव नहीं है। –

+2

यह सभी आयातित मॉड्यूल देखता है और फिर पूरी तरह से सर्वर प्रक्रिया को पुनरारंभ करता है। वर्तमान में घड़ी-सूची (उदा। टेम्पलेट्स) में अतिरिक्त फ़ाइलों को जोड़ने का कोई तरीका नहीं है लेकिन टेम्पलेट्स को डीबग मोड में कैश नहीं किया गया है। – defnull

3

साथ

run(reloader=True) 

स्थितियों में, जहां ऐसा लगता है जैसे जब आयात एक डीईएफ़ अंदर है लोड नहीं होता है देखते हैं। एक बार पुनः लोड करने के लिए मजबूर करने के लिए मैं

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

का इस्तेमाल किया और यह लिनक्स में ठीक पुन: लोड।

1

run() में reloader=True का उपयोग करें। ध्यान रखें कि multiprocessing मॉड्यूल के तरीके के कारण विंडोज़ में यह if __name__ == "__main__": के तहत होना चाहिए।

from bottle import run 

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

ये स्क्रिप्ट आपको जो चाहिए वह करना चाहिए।

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)