django在共享主机中使用fcgi

时间:2014-08-30 18:26:38

标签: python django .htaccess fastcgi

我试图检查我的主机是否支持我的django网站所需的内容,所以我试图建立一个基本的django网站。 更复杂的是,我需要从同一台服务器运行另一个joomla页面(见下文)。 我不知道我做错了什么(最有可能的)以及我应该从主持人那里问什么。 (我知道我这是一个小菜鸟)

这是我到目前为止所拥有的: 在/ home / username /

  1. library-site /< - django files

    • LIB /
      • manage.py
      • LIB /
        • settings.py
        • ...
  2. 公共HTML /

    • 的cgi-bin
    • folder_containing_joomla_site
    • library< - folder_id_like_to_use_for_my_page
  3. library< - virtual_env

    • ...
  4. (遵循指南我已将virtualenv的网站包符号链接到library_site / lib)

    我必须说我已经尝试了很多指南,所以很难呈现整个图片,但这就是我现在所拥有的

    在public_html / library / dispatch.fcgi

    #!/home/username/library/bin/python
    
    import sys
    import os
    
    sys.path.insert(0, "/home/username/library/bin/python")
    sys.path.append('/home/username/library/lib/python2.6/site-packages')
    sys.path.insert(13, "/home/username/public_html/library")
    
    open("/home/username/public_html/library/cgi.log", "w").write("Before try")
    
    try:
        os.environ['DJANGO_SETTINGS_MODULE'] = 'lib.settings'
        from django.core.servers.fastcgi import runfastcgi
        runfastcgi(method="threaded", daemonize="false")
    except Exception:
        open("/home/username/public_html/library/cgi.log", "w").write(format_exc())
        raise
    

    在public_html / library / .htaccess

    AddHandler fcgid-script .fcgi
    Options +FollowSymLinks
    RewriteEngine On
      RewriteBase /library/
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
      RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]
    

    像这样导航到http://example.com/library会显示文件夹的内容。单击dispatch.fcgi只显示python代码。

    运行./dispatch.fcgi从返回正确的django输出但前四行读取

    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!
    

    这些都告诉我,我需要向主持人提问,但我不知道此时是什么。

    另外,正在运行

    python ~/library_site/lib/manage.py runfcgi daemonize=false host=127.0.0.1 port=3033 maxrequests=1
    

    按照此处的建议:https://twiki.cern.ch/twiki/bin/view/ITCF/DjangoGeneral不会返回任何问题。

    最后,启动django服务器:

    python manage.py runserver 0.0.0.0:8000
    

    工作正常。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

FCGI要求它与WSGI之间存在转换层。确保安装了flup并且您的FCGI文件是可执行的

Here is a guide大约两年前我就能开始工作了。

答案 1 :(得分:0)

我现在觉得有点愚蠢,因为答案真是微不足道。遵循本指南http://joemaller.com/1467/django-via-cgi-on-shared-hosting/我已将.fcgi放入cgi-bin并在public_html中编写了相应的.htaccess文件,并且......瞧!

作为将来尝试此操作的任何人感兴趣的一点,关于静态文件(更令人痛苦的是),我已将它们放入' public_html / library / static /& #39; (< - STATIC ROOT)使用绝对路径,然后我的STATIC_URL是' / lib_files / static /'。