Bluehost Django fastcgi配置, 静态(static)文件处理

作者:半瓶墨水   链接:http://www.2maomao.com/blog/bluehost-django-fastcgi-static/

0. 安装自己的Python,参见:configure your own python 2.5.2 on bluehost

1. 安装完以后重启shell(直接敲bash回车或者重连putty)

2. 下载并安装ez_setup

3. 我用mysql,所以安装mysql-python: easy_install mysql-python

4. 安装flup和django:
easy_install flup
下载django包,解压(我放到了/home/twomaom1/django/src目录),按照指令安装

5、设置子域名,我设置的是code.fayaa.com,网络不熟啊,至今不是很懂,似乎一些apache设置以及django默认配置的问题,搞个子域名比较好办

6、在该子域名的目录下(我的是:/home/twomaom1/public_html/fayaa/code/),新建.htaccess,内容如下:

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteBase /
#static file setting
RewriteRule ^(static/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ t.fcgi/$1 [QSA,L]

7. 新建个t.fcgi,改为可执行(chmod +x t.fcgi),内容如下:

#!/home/twomaom1/twomaom1/bin/python
import sys, os
# Add a custom Python path.
sys.path.insert(0, "/home/twomaom1/twomaom1/python")
sys.path.insert(0, "/home/twomaom1/django")
os.chdir("/home/twomaom1/django/code")
os.environ['DJANGO_SETTINGS_MODULE'] = "code.settings"
from django.core.servers.fastcgi import runfastcgi
runfastcgi(["method=threaded", "daemonize=false"])

注意你的python目录以及django目录,django工程目录

8. 到/home/twomaom1/django目录下,生成一个工程,叫做code(注意,如果你用python manage.py runserver的方式,最好不要用code做工程的名字,会出错的,似乎是个bug),里面的settings.py配置好mysql

9. 打开浏览器看一下吧,应该差不多了

静态文件设置我试过django自带的、apache alias和Apache rewrite,在开发时使用这种方法还不错。
bluehost上,我是用的是Apache RewriteRule(见上面的Apache配置),直接把东西放到了t.fcgi所在目录的某个子目录下。
据说Alias也很不错,我试过很多次,每次都是500 Server Internal Error,放弃了

注意:有时候改了文件,想要重启django server,由于fastcgi的预加载,需要做如下尝试:
1. 改变时间戳:touch t.fcgi文件,或者直接打开后强制保存
2. 如果上述方法无效,则尝试把t.fcgi改名,一会儿再改回来
3. 简单粗暴有效果的方法:
用putty连上,打印并过滤python有关的进程:
ps -ef | grep python
在输出中发现这一行:
twomaom1 16445 1982 0 09:41 ? 00:00:00 /home/twomaom1/twomaom1/bin/python t.fcgi
杀之:
kp 16445

我喜欢第三种。

参考文件:Django and DreamHost

16 条评论 发表在“Bluehost Django fastcgi配置, 静态(static)文件处理”上

  1. issin说道:

    两个月前按一个国外的文档没搞成功,放弃了。
    今天再参考了你的t.fcgi,原来是之前的路径没写全,现在已经好了,谢谢 😀

  2. 半瓶墨水说道:

    @issin 呵呵很多国外的文档也是转来转去的,我当时也费了好大劲

  3. issin说道:

    嗯,另外你喜欢的第三种方法,也可以用cpanel的Process Manager来处理。

  4. 半瓶墨水说道:

    @issin 嗯,说的不错,我现在有时候就是用process manager来做的

  5. link说道:

    按你的方法做了,网页显示500错误,直接运行显示
    WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
    WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
    WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
    WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
    Status: 200 OK
    怎么搞呀,多谢赐教……

  6. 半瓶墨水说道:

    @link bluehost?你可以一步步检查一下,我没遇到过这种错误信息

  7. link说道:

    /home/twomaom1/django
    为什么要加载这个模块

  8. 半瓶墨水说道:

    @link
    忘记了…当时好像是找不到django lib的位置…

  9. […] 5. fastcgi配置:要向外发布django应用,一种是用mod_python,另外就是用fastcgi; 前者稳定,但是修改配置需要重启apache服务器,后者相对稳定性弱一些,但是修改配置后只需要重启fastcgi进程。关于fastcgi的发布django的配置可以参考这里。而关于fastcgi的重启方法可以参考这里(我的山寨方法是每次先chomod -x dispatch.cgi, 删除运行权限;然后刷新页面;然后再chmod +x dispatch.cgi重置权限,貌似很有效)。 […]

  10. lxd说道:

    安装自己的Python,我按照好后,修改了“.bashrc” file,还是无效

  11. 半瓶墨水说道:

    @lxd 要注意改变.bashrc只影响putty登陆界面的python路径,要想改变django所用的python,要更改t.fcgi,将新的python路径insert到python的sys.path最前面(参见第7步)

  12. 小杰说道:

    你好,我配置完了以后 用浏览器打开时500错误,不知道什么原因。

  13. 半瓶墨水说道:

    @小杰

    在后台自己用python manage.py runserver,然后curl http://localhost:8000试试看,如果返回200 OK的话,就不是django的问题,是fcgi配置的问题。一个个排查吧。注意t.fcgi也是python,可以加log看看

  14. 小布说道:

    在上面都配置好之后,浏览器还是显示不了 请问怎么回事?

    error:
    The requested URL /admin was not found on this server

    error_log:
    File does not exist: /usr/local/apache2/htdocs/admin

  15. 半瓶墨水说道:

    文件不存在或者文件权限问题。看看是不是apache用户没有这个文件的访问权限。

    查看apache所用的用户:ps aux | grep apache

  16. qtingker说道:

    sys.path.insert(0, “/home/twomaom1/twomaom1/python”)
    这个 /home/twomaom1/twomaom1/python 是什么路径

留下回复