SAE Tornado Worker 的一點使用經歷

首先,SAE的python web框架使用的文檔在這裏:入門指南css

使用的tornado版本是3.1。文檔裏也有提到,Torando的Worker還不穩定,須要謹慎使用。html

問題:

首先申明:懶人,只是在本地測試的時候發現這個問題了,線上測試沒有進行過,估計也會有。python

在使用過程當中,發現其餘各個方面都還好,可是若是使用Tornado的sattic_path配置,在本地測試過程當中,總會出現static path 中的文件沒法訪問的問題,瀏覽器報錯誤 403, forbiden了,說是權限問題。web

緣由

文檔中有提到瀏覽器

若是config.yaml中沒有設置靜態文件相關的handlers,系統會默認將/static爲前綴 的URL轉發到應用目錄下的static目錄。框架

因此估計是由於SAE自動的會將 /static 目錄做爲靜態文件目錄,而後tornado也會處理這個目錄,衝突了。ide

解決方案

沒有在線上進行過測試,但本地能夠簡單修改tornado的web.py代碼解決掉這個問題。函數

測試發現,其實出錯的主要緣由,在於web.py會將 /static/yourfile.css分割開,分紅了root部分./static和path部分yourfile.css。可是若是加上sae,後面一半path會變成 /yourfile.csstornado

解決:在tornado的web.py中,修改函數get_absolute_path,改爲:測試

def get_absolute_path(cls, root, path):
    if path.startswith("/"): path = path[1:]   # !! 添加這句
    abspath = os.path.abspath(os.path.join(root, path))
    return abspath

但畢竟沒辦法修改SAE預裝打代碼,也就是在本地能用着,因此:

  1. 很簡單,放棄使用tornado的模板引擎,改用其餘的模板引擎,如jinja2, pytenjin 什麼的,一堆一堆的。
  2. 哈哈,不用worker嘍,老老實實用wsgi。
相關文章
相關標籤/搜索