webpy陷阱之web.application with autoreload

來源:互聯網
上載者:User

在使用webpy時發現的web.application reload的陷阱,暫時記錄下來,以便自己和他人蔘考。
現象是這樣的:
  在設定檔中定義urls:

urls = (
# front page
"/", "app.controllers.base.index",
"/index/", "app.controllers.base.index",
)

  同時為了隱藏部分url對應關係,在程式中增加url映射關係如下:

self._app.add_mapping(url_login, Login)
self._app.add_mapping(url_logout, Logout)

啟動webpy主程式碼如下:
  

app = web.application(urls, globals())
app.run()

系統運行時訪問url_login卻提示404 Not Found錯誤,也就是說程式中增加(url_login, Login)的映射並沒有真正成功。
通過跟蹤分析webpy源碼發現,原來webpy為了提高開發環境下的調試效率,特意在構造application時可以指定是否autoreload url配置,如果在建立application時autoreload為None或者web.config.debug 為 True,則在每次處理每一個request時都重新載入mapping,如果autoreload為True,則每次重新構建時mapping都被初始化為建立application時傳入的urls。也就是說在程式中增加的mapping都會在處理request時被清除。
為解決這一問題,可以在建立application時將autoreload設定為False或者將web.config.debug設定為False,代碼如下

# in development debug error messages and reloader
web.config.debug = False
# in production, we should disable the autoreload of the urls mapping
app = web.application(urls, globals(), autoreload = False)

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.