2012-08-30 18 views
7

當我嘗試在webfactional上的服務器上運行webapp時,我在關於STATIC_URL和STATIC_ROOT的問題中停留了2小時。服務器上的Django中的STATIC_ROOT

當我加載網頁時,除了{{STATIC_URL}}的任何鏈接正在工作或正在加載的情況外,所有請求都能正常工作。

以便在螢火蟲出現一個常見的錯誤是:

GET http://mydomain/static/extras/h5bp/js/libs/modernizr-2.5.3.min.js 500 (Internal Server Error) 

我的設置是:

urls.py 我什麼也沒做,並沒有什麼關於靜態文件。

settings.py DEBUG =假

STATIC_ROOT = '/home/mydomain/webapps/static_app/' 
STATIC_URL = 'http://mydomain/static/' 
STATICFILES_DIRS =() 

views.py 視圖示例

@csrf_exempt 
def IndexView(request): 
    try: 
     request.user.is_authenticated() 
    except AttributeError: 
     return render_to_response('index.html', 
           {'request': request,}, 
           context_instance=RequestContext(request)) 

    return render_to_response('index.html', 
        {'request': request, 'profile' : request.user}, 
        context_instance=RequestContext(request)) 

的index.html 未找到

<script src="{{ STATIC_URL }}extras/h5bp/js/libs/modernizr-2.5.3.min.js"></script> 

井的碼的一部分,我遵循以下所有要點: https://docs.djangoproject.com/en/1.4/howto/static-files/ 這另一個問題: http://docs.webfaction.com/software/django/getting-started.html

我使用的是正確安裝的應用程序,中間件,template_contexts。

如果我失去了一些東西,請幫我弄清楚。

在此先感謝!

--edit

我不得不說,如果我只是改變了DEBUG = true,將正常工作。

因爲urls.py我有這樣一段代碼:

if settings.DEBUG: 
    # static files (images, css, javascript, etc.) 
    urlpatterns += patterns('', 
     (r'^media/(?P<path>.*)/$', 'django.views.static.serve', { 
     'document_root': settings.MEDIA_ROOT})) 

回答

11

2事必須發生在未在開發環境中需要生產environent。

您必須運行manage.py collectstatic - 這會將所有靜態文件收集到您的STATIC_ROOT目錄中。

您必須爲您的STATIC_ROOT目錄提供STATIC_URL網址。具體取決於您的生產設置。這甚至與django沒有關係;所有重要的是STATIC_ROOT內容可在STATIC_URL

假設您使用的是Apache,您會將一個URL別名到一個目錄。

Alias /static/ /path/to/my/static_root/ 

如果您使用nginx的,它會像

location = /static/ { 
    alias /path/to/my/static_root/; 
} 

我你使用webfaction剛剛意識到,在這種情況下,您設置一個靜態的應用程序,它真的只是在提供文件服務您定義的URL處的目標目錄。我試圖記住我的webfaction登錄看到確切的程序,但它不應該很難弄清楚。

更新: 登錄到webfaction;您可以創建一個符號鏈接的應用程序。簡單!

創建一個服務於/ YOUR_STATIC_URL /的符號鏈接應用程序,並將其指向/ YOUR_STATIC_ROOT /。完成!

+0

謝謝,作品完美。 只是一個小問題,關於媒體文件? 我們沒有python manage.py collectstatic,對嗎? – cleliodpaula

+0

媒體文件通常更多用於用戶上傳的文件,因此無法在部署時收集。 –