2017-04-08 71 views
0

我在使用Apache 2.4.7來爲Django 1.8.17應用程序提供服務,使用mod_wsgi 4.5.15和Python 3.5.3作爲虛擬環境。這是我機器上唯一的虛擬環境(Linux Mint 17.3)。CSS不使用Apache,Django和mod_wsgi進行渲染

所有的動態內容都會通過,但不是所有的靜態內容。

  • 我在我的項目中有幾個應用程序,當我運行collectstatic時,它似乎將它們都放在一個正確的位置,就像它應該的那樣。我檢查了他們,他們都在那裏。

  • 我已使用「sudo chown -R www-data:www-data ...」給出了該位置所有文件的權限。

  • 我已經修改我的Apache虛擬主機文件,添加別名的指向我的「媒體」,並使用絕對路徑「靜態」的目錄。

  • 當沒有工作,我修修補補與settings.py和試圖改變其確定STATIC_ROOT和STATICFILES_DIRS至絕對路徑的動態代碼(即沒有任何工作,我改回去)

home/magic-rat/ 
| 
|_____+virtualenvs 
|    | 
|    |+ektropy_project 
|      | 
|      |+lib 
|       | 
|       |+python3.5 
|        | 
|        |+site_packages 
| 
|_____+ektropy_project 
        | 
        |-manage.py 
        |+static (for pinax) 
        |  | 
        |  |+dist 
        |  |+src 
        | 
        |+ektropy_project 
          | 
          |-wsgi.py 
          | 
          |+site_media 
           | 
           |+media 
       STATIC HERE=> |+static 
            | 
            |+admin 
            |+bootstrap 
            |+css 
            |+fonts 
            |+js 
            |+pinax 

Apache的虛擬主機:

Alias /media /home/magic-rat/ektropy_project/ektropy_project/site_media/media 
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/media> 
    Require all granted 
</Directory> 

Alias /static /home/magic-rat/ektropy_project/ektropy_project/site_media/static 
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/static> 
    Require all granted 
</Directory> 

WSGIDaemonProcess ektropy_project python-home=/home/magic-rat/virtualenvs/ektropy_project python-path=/home/magic-rat/ektropy_project 
WSGIProcessGroup ektropy_project 
WSGIApplicationGroup %{GLOBAL} 
WSGIScriptAlias//home/magic-rat/ektropy_project/ektropy_project/wsgi.py 

<Directory /home/magic-rat/ektropy_project/ektropy_project> 
    <Files wsgi.py> 
     Require all granted 
    </Files> 
</Directory> 

相關部分Settings.py:

import os 

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) 
BASE_DIR = PACKAGE_ROOT 

MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media") 

MEDIA_URL = "/site_media/media/" 

STATIC_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "static") 

STATIC_URL = "/site_media/static/" 

# Additional locations of static files 
STATICFILES_DIRS = [ 
    os.path.join(PROJECT_ROOT, "static", "dist"), 
] 

# List of finder classes that know how to find static files in 
# various locations. 
STATICFILES_FINDERS = [ 
    "django.contrib.staticfiles.finders.FileSystemFinder", 
    "django.contrib.staticfiles.finders.AppDirectoriesFinder", 
] 

ROOT_URLCONF = "ektropy_project.urls" 

WSGI_APPLICATION = "ektropy_project.wsgi.application" 

我真的很茫然。

「django.contrib.staticfiles」,是在 「INSTALLED_APPS」

沒有拋出錯誤。 Apache錯誤日誌很乾淨。 Apache只是看不到靜態內容。

回答

0

chown -R www-data:www-data是不是你想要的。它仍然可以是以前的用戶。最關鍵的是,所有的目錄下的目錄,其中靜態文件的權限o+rx,並且這些文件本身o+r。如果有一些目錄層次結構中的任何位置下降到與不正確的權限這一點上,Apache用戶將無法讀出任何的目錄。

看起來錯的事情是:

MEDIA_URL = "/site_media/media/" 
STATIC_URL = "/site_media/static/" 

這些不匹配什麼是在Apache的配置。

要麼改變那些:

MEDIA_URL = "/media/" 
STATIC_URL = "/static/" 

或更改Apache配置以:

Alias /site_media/media /home/magic-rat/ektropy_project/ektropy_project/site_media/media 
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/media> 
    Require all granted 
</Directory> 

Alias /site_media/static /home/magic-rat/ektropy_project/ektropy_project/site_media/static 
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/static> 
    Require all granted 
</Directory> 

的第一個參數Alias指令應該匹配MEDIA_URLSTATIC_URL

+0

完美。謝謝,格雷厄姆。我現在起來跑步了。 – Pat