2012-06-12 29 views
24

Tôi thực sự thích Bottle cho đến nay, nhưng thực tế là tôi phải CTRL + C ra khỏi máy chủ và khởi động lại nó mỗi khi tôi thực hiện thay đổi mã là một hit lớn về năng suất của tôi. Tôi đã nghĩ về việc sử dụng Watchdog để theo dõi các tệp thay đổi sau đó khởi động lại máy chủ, nhưng làm cách nào tôi có thể làm điều đó khi chức năng bottle.run đang chặn.Tôi làm cách nào để lấy lại Chai để thay đổi tệp?

Chạy máy chủ từ tập lệnh bên ngoài để theo dõi thay đổi tệp có vẻ như là công việc để thiết lập. Tôi nghĩ rằng đây là một vấn đề phổ quát đối với các nhà phát triển Bottle, CherryPy và etcetera.

Cảm ơn các giải pháp của bạn về vấn đề này!

Trả lời

38

Kiểm tra ra khỏi hướng dẫn một phần có tiêu đề "Auto Reloading"

Trong phát triển, bạn phải khởi động lại máy chủ rất nhiều để kiểm tra thay đổi gần đây của bạn. Trình tải lại tự động có thể thực hiện việc này cho bạn. Mỗi khi bạn chỉnh sửa tệp mô-đun, trình tải lại sẽ khởi động lại quy trình máy chủ và tải phiên bản mã mới nhất của bạn.

này đưa ra ví dụ sau đây:

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

Oh, mát mẻ! Có bất kỳ tình huống nào trong đó điều này sẽ không tải lại mô-đun không? Tôi giả sử nó xem tất cả các mô-đun đã nhập – Hubro

+0

Thật không may là tôi không có đủ kinh nghiệm để có thể nói theo cách này hay cách khác. –

+2

Nó xem tất cả các mô-đun đã nhập và sau đó khởi động lại hoàn toàn quy trình máy chủ. Hiện tại không có cách nào để thêm tệp bổ sung vào danh sách xem (ví dụ: mẫu) nhưng các mẫu không được lưu trong bộ nhớ cache ở chế độ gỡ lỗi. – defnull

3

Với

run(reloader=True) 

có những tình huống mà nó không tải lại như khi nhập khẩu là bên trong một def. Để buộc tải lại, tôi đã sử dụng

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

và nó tải lại tốt trong linux.

1

Sử dụng reloader=True trong run(). Xin lưu ý rằng trong cửa sổ, cửa sổ này phải nằm dưới if __name__ == "__main__": do cách mô-đun multiprocessing hoạt động.

from bottle import run 

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

Các tập lệnh này nên thực hiện những gì bạn đang tìm kiếm.

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) 
Các vấn đề liên quan