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后,暂且看不到任何辣眼睛的爆红提醒了。
最新文章
- jQ函数after、append、appendTo的区别
- WordCount示例深度学习MapReduce过程(1)
- FreeMarker常用语法
- C puzzles详解【1-5题】
- Function模式 -- 深入理解javascript
- 对struts2的基本知识和环境的搭建(配图解)
- Abstract Factory 抽象工厂模式
- 剖析并利用Visual Studio Code在Mac上编译、调试c#程序【转】
- Jenkins修改域认证,非域用户忘记密码处理
- Extjs4.2 Tree使用技巧
- 获取EditText的光标位置
- 获取URL中的参数值
- Log POST Data in Nginx
- 从零开始学习前端开发 — 2、CSS基础
- 【翻译】在Ext JS中创建特定主题的重写
- 为什么目前无法再docker for windows中调用GPU
- 第一天接触stm32
- Vmware的虚拟机示例进入BIOS方法
- codeforces 889A
- android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
热门文章
- aar的使用(module或者library)
- [C#]读取不同版本的excel文件的方法
- Appium解决搜索框问题
- 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
- Linux 各种软件的安装-tomcat8+JDK篇
- Tomcat ---->; 学习笔记
- G.711是一种由国际电信联盟(ITU-T)制定的音频编码方式
- LeetCode--350--两个数组的交集2
- codeforces708b// Recover the String //AIM Tech Round 3 (Div. 1)
- android--------Eclipse中ddms heap内存分析工具