我正在努力让Apache 2.4.7使用mod_wsgi 4.5.15和Python 3.5.3作为虚拟环境来提供Django 1.8.17应用程序。这是我在机器上唯一的虚拟环境(Linux Mint 17.3)。
所有动态内容都是通过,但不是所有的静态内容。
我的项目中有几个应用程序,当我运行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"
我真的很茫然。
&#34; django.contrib.staticfiles&#34;,在&#34; INSTALLED_APPS&#34;
没有抛出任何错误。 Apache错误日志很干净。 Apache无法看到静态内容。
答案 0 :(得分: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_URL
和STATIC_URL
匹配。