我认为这是常见问题,但不是我尝试过的解决方案。
apache conf中的代码:
<VirtualHost *:80>
ServerName xxxx
ServerAdmin xxxx
DocumentRoot /home/matousc/apps/iacah
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/matousc/apps/iacah/www/static
<Directory /home/matousc/apps/iacah/www/static>
Require all granted
Allow from all
</Directory>
<Directory /home/matousc/apps/iacah/app/mainapp>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess iacah python-path=/home/matousc/apps/iacah/app python-home=/home/matousc/apps/appenv
WSGIProcessGroup iacah
WSGIScriptAlias / /home/matousc/apps/iacah/app/mainapp/wsgi.py
</VirtualHost>
我可以通过Internet访问该页面,所以我确定我正在编辑正确的apache conf文件。但是,不会加载静态文件。
未下载静态文件,出现 403错误。我注意到,如果我更改行:
Alias /static/ /home/matousc/apps/iacah/www/static
to(在static
末尾删除斜杠:
Alias /static /home/matousc/apps/iacah/www/static
然后我会收到 404错误。在教程中,我看到了这两种选择,所以我有点困惑为什么它可以发挥作用。
/www/
文件夹的所有者是www-data
(我正在使用ubuntu 18):
drwxrwx--x 3 www-data www-data 4096 Sep 21 10:14 .
drwxr-xr-x 8 matousc matousc 4096 Sep 21 10:14 ..
drwxrwxrwx 12 www-data www-data 4096 Sep 21 10:14 static
我将本机用作多主机,并且还有一个静态网站可以正常工作(文件正确提供)
<VirtualHost *:80>
ServerName xxxxx
ServerAdmin xxxx
DocumentRoot /home/matousc/apps/placeholder
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /home/matousc/apps/placeholder>
Require all granted
Options +Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
在Django中,我使用(我希望推荐)设置:
STATIC_URL = "/static/"
if production_machine:
level_up = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(level_up, "www", "static")
STATICFILES_DIRS = (
STATIC_ROOT,
)
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
({production_machine
应该为True)。
有什么想法我还能尝试吗?
答案 0 :(得分:1)
您是否运行了manage.py collectstatic?在生产中,您需要调用django将此代码从您的开发代码复制到STATIC_ROOT位置。
https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#collectstatic
答案 1 :(得分:0)
我不确定主要问题是什么,但是在又一个小时的纯巫术之后,问题神奇地消失了。对于陷入同样情况的其他人:
确保您正在编辑正确的apache conf文件
与@Du D.一样,建议确保正确收集了静态文件。可能会发生多个问题(它无法捕获您的所有静态文件夹等)。在您的settings.py
检查您是否真的知道谁是您计算机上的apache用户
确保包含静态文件的文件夹归apache用户所有,并且具有递归的rwx访问权限!
在apache conf文件中经常使用斜线播放。似乎使用斜杠的某些组合优于其他组合。在我的情况下,/static/
是不正确的(即使之前仅抛出403而不是404)。我的工作示例仅适用于/static
。
我可能会错过一些步骤,因为我很幸运并且没有遇到所有可能的问题,所以请随时编辑/扩展我的答案。