2010-10-21 19 views
6

Tôi đang thiết lập một ứng dụng CherryPy và muốn có đa số thiết lập cấu hình của tôi trong một file conf như thế này:CherryPy kết hợp tập tin và từ điển dựa cấu hình

[global] 
server.socketPort = 8080 
server.threadPool = 10 
server.environment = "production" 

Tuy nhiên tôi cũng muốn thiết lập một vài từ điển với một từ điển trong mã như sau:

conf = {'/': {'tools.staticdir.on': True, 
       'tools.staticdir.dir': os.path.join(current_dir, 'templates')}}    

cherrypy.quickstart(HelloWorld(), config=conf) 

Có thể kết hợp cả hai cấu hình vào một và sau đó chuyển nó vào tùy chọn cấu hình nhanh?

Trả lời

11

quickstart dành cho trang web nhanh. Nếu bạn đang làm bất cứ điều gì phức tạp như có nhiều cấu hình, đó là thời gian để tốt nghiệp. Nhìn vào mã nguồn của hàm quickstart (nó không đáng sợ!): Bạn sẽ giải nén mã đó vào tập lệnh khởi động của mình. Vì vậy, thay vì quickstart, hãy viết điều này:

cherrypy.config.update(conffile) 
cherrypy.config.update(confdict) 

app = cherrypy.tree.mount(HelloWorld(), '/', conffile) 
app.merge(confdict) 

if hasattr(cherrypy.engine, "signal_handler"): 
    cherrypy.engine.signal_handler.subscribe() 
if hasattr(cherrypy.engine, "console_control_handler"): 
    cherrypy.engine.console_control_handler.subscribe() 
cherrypy.engine.start() 
cherrypy.engine.block() 

Chúng tôi về cơ bản đã thêm hai dòng vào mã khởi động nhanh. Trước tiên, chúng tôi có thêm một cuộc gọi đến config.update; hợp nhất cấu hình dict vào cấu hình chung. Thứ hai, app.merge(confdict); đó là để hợp nhất nhiều cấu hình vào mỗi ứng dụng.

Bạn hoàn toàn có thể thực hiện việc này theo thứ tự ngược lại nếu bạn muốn cấu hình tệp ghi đè lên dict. Bạn cũng có thể dán cấu hình dựa trên dict vào HelloWorld._cp_config dưới dạng described trong tài liệu.

+0

Hoạt động tuyệt vời. Cảm ơn! – jamesaharvey

2

Đó là hai cấu hình khác nhau. Cherrypy có hai cấu hình: Một là cấu hình toàn cục và cấu hình còn lại là cấu hình ứng dụng. Bạn có thể sử dụng cả hai thường:

cherrypy.config.update('my_file.ini') 
cherrypy.quickstart(HelloWorld(), config=conf) 

Xin lưu ý rằng tập tin ví dụ cấu hình của bạn là sai - thay vì server.socketPort nó phải được server.socket_port và thay vì server.threadPool nó phải được server.threadpool. Kiểm tra config docs để biết thêm thông tin.

+0

Ok, nhưng những gì tôi thực sự muốn làm là chỉ định hầu hết các giá trị cấu hình trong my_file.ini, với một vài bổ sung yêu cầu mã. Có thể làm cả hai? – jamesaharvey

Các vấn đề liên quan