2009-12-23 111 views
9

我是django的新成員。我試過但我無法部署。我該怎麼辦在alwaysdata.com部署Django

#!/usr/bin/python 
import sys 
import os 

base = os.path.dirname(os.path.abspath(__file__)) + '/..' 
sys.path.append(base) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'myfirstapp.settings' 

import django.core.handlers.wsgi 

application = django.core.handlers.wsgi.WSGIHandler() 

AddHandler fcgid-script .fcgi 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^(media/.*)$ - [L] 
RewriteRule ^(adminmedia/.*)$ - [L] 
RewriteCond %{REQUEST_URI} !(cgi-bin/myproject.fcgi) 
RewriteRule ^(.*)$ mysite.fcgi/$1 [L] 
+0

給我一個工作示例 – Emrah 2009-12-23 20:40:57

+0

你有錯誤嗎?你在第5行缺少一個+,你的意思是「../」而不是「/ ..」? – Seth 2009-12-23 20:45:27

回答

21

這裏的alwaysdata wiki entry與FastCGI的設置Django的。只有方面:它是用法語寫的。

好了,我不會說法語,但它基本上說的是:

  1. 創建一個Django項目的文件夾名爲public目錄。
  2. 在該目錄中創建文件django.fcgi,內容如下:

    #!/usr/bin/python 
    import os, sys 
    
    _PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
    sys.path.insert(0, _PROJECT_DIR) 
    sys.path.insert(0, os.path.dirname(_PROJECT_DIR)) 
    
    _PROJECT_NAME = _PROJECT_DIR.split('/')[-1] 
    os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME 
    
    from django.core.servers.fastcgi import runfastcgi 
    runfastcgi(method="threaded", daemonize="false") 
    
  3. 接下來,創建於public文件夾下面的內容的.htaccess:

    AddHandler fcgid-script .fcgi 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L] 
    
  4. 如果」重新計劃包含django管理界面,在您的public目錄中創建此符號鏈接:

    ln -s /usr/local/alwaysdata/python/django/1.1/django/contrib/admin/media/ media 
    
  5. 到底你的文件夾樹的層次結構應該以某種方式是這樣的:

    myproject/ 
        __init__.py 
        manage.py 
        public/ 
         django.fcgi 
         .htaccess 
         media/ 
        settings.py 
        urls.py 
        myapp/ 
         views.py 
         models.py 
    

希望這有助於。我和管理員談過了,他說他很快會提供一個英文維基。讓我們希望這將會很快發生。


更新:有一個English wiki article now.

+0

它的工作! 祝賀你的第一個Django驅動頁面。 謝謝... – Emrah 2009-12-23 21:45:19

+5

+1用於提供有關係統的答案,其中包含用您不會說話的語言編寫的文檔。也許應該有一個新的徽章,只是不知道它會被稱爲。多語種,非轉譯 - 野生驢猜測,hackage?呃,太久了。 :-) – 2009-12-23 21:58:52

+2

AlwaysData每天都變得越來越國際化。我認爲如果你已經準備好幫助英文維基,他們會很高興(這是一個維基,所以你可以貢獻)。如果文檔是法文的,支持是世界級的:) – luc 2009-12-24 05:44:10

6

您正在試圖將兩種不同的Web服務器整合方法:FCGI(快速CGI)和WSGI。

您的第一個片段是與Web服務器的wsgi接口,並且是將Django與Apache集成的推薦方法。非常好的資源(包括示例),以幫助您正確設置它可以在官方的Django文檔How to use Django with Apache and mod_wsgi和mod_wsgi的文檔Integration with Django

第二個片段(與AddHandler的線)是FCGI被發現。這是更常用於將Django與lighttpd和nginx Web服務器進行接口的接口。設置fcgi接口的資源可以在官方的Django文檔How to use Django with FastCGI, SCGI, or AJP中找到。

由於它看起來像alwaysdata.com只使用FastCGI(fcgi)接口,您堅持使用此方法。它看起來像有自己的維基Déployer une application Django頁中的實例,並格外你需要用它來取代你的第一個(WSG​​I)片段:

#!/usr/bin/python 
import os, sys 

_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.insert(0, _PROJECT_DIR) 
sys.path.insert(0, os.path.dirname(_PROJECT_DIR)) 

_PROJECT_NAME = _PROJECT_DIR.split('/')[-1] 
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME 

from django.core.servers.fastcgi import runfastcgi 
runfastcgi(method="threaded", daemonize="false")