flask+apache+mod-wsgi部署遇到的坑


  首先,看到這種方式部署,我也有疑問,為什么不用nginx,gunicorn。接手的項目,就先按照前人思路run起來。

  線上使用ubuntu系統,apache2,而給我玩耍的測試機是centos6.5,就按照這個裝了httpd和mod-wsig,都是python2環境。一路下來,遇到下面幾個問題:

  一、403Forbidden

  網站上各路大神基本指明是目錄權限問題,開始只給我的項目目錄指定權限:chmod -R 777 /root/autobase_pj,無效。后改:chmod 755 /root,403消除了。

 

  二、500錯誤,ImportError: No module named ...

  tail -f /var/log/httpd/error_log  可以看到是沒找到flask相關依賴,所以得進到虛擬環境,在項目根目錄下的.wsgi中配置一下path:

import sys
import site
sys.path.insert(0,"/root/autobase_pj");
site.addsitedir("/root/autobase/lib/python2.7/site-packages");
from manage import app as application
activate_this = 'root/autobase/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

  

  三、還是500錯誤,... flask/helpers.py", line 628, in send_file ...,TypeError: make_conditional() got an unexpected keyword argument 'accept_ranges

  日志說明flask內部文件報錯,查看日志開始apache啟動的時候:[notice] Apache/2.2.15 (Unix) mod_wsgi/4.6.2 Python/2.6 DAV/2 configured -- resuming normal operations。可見python版本不對,mod-wsgi默認是使用python2.6,執行mod_wsgi-express module-config,得到:

LoadModule wsgi_module "/usr/lib64/python2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so"
WSGIPythonHome "/usr"

將其復制粘貼到/etc/httpd/conf/httpd.conf 一堆LoadModule中,保存重啟service httpd restart即可。自己的網頁就可以打開了。

 

  四、部分image和js無法加載

  apache跟nginx差不多,應該需要指定下靜態文件路徑,在httpd.conf最下面VirtualHost中WSGIScriptAlias 指定wsgi文件下面加上Alias /static /root/autobase_pj/app/static,你的靜態文件路徑,重啟apache,暫且正常了。

 

  五、web首頁控制台報錯,Cannot read property 'defaults' of undefined TypeError: Cannot read property 'defaults' of undefined

  百度一番,js加載順序有問題,在頁面中加載jquery下面加載jquery.dataTables.js,保存,重啟apache后,暫且看不到任何辣眼睛的爆紅提醒了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM