尝试了多种解决方案后无法在生产中加载静态文件

问题描述 投票:0回答:1

我已将django项目从开发移至生产服务器。部署后,我无法查看页面上的静态文件。

我知道,一旦关闭调试,django将不会提供静态文件,并已尝试使用whitenoise来提供我的静态文件。

Attempt 1- WhiteNoise

这些是我对settings.py所做的更改

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

和wsgi.py:

from whitenoise.django import DjangoWhiteNoise
...
application = get_wsgi_application()
application = DjangoWhiteNoise(application)

然后运行collectstatic。但是,我的网页仍未加载任何静态文件。

Attempt 2- Apache- mod_wsgi

[第二次尝试,我尝试使用apache + mod_wsgi。具体来说,我是使用安装在apache2中的cpanel中的终端连接到我的VPS,然后跟随tutorial

sudo apt-get install apache2

创建了我的conf文件

sudo nano new_config.conf

添加到此

<VirtualHost *:80>
        ServerName 127.0.0.1
        ServerAlias localhost

        Alias /static /var/gradientboostmvp/static/
        WSGIScriptAlias / /var/gradientboostmvp/django_school/wsgi.py

        <Directory /var/gradientboostmvp/>
                Order deny,allow
                Allow from all
        </Directory>

        DocumentRoot /var/gradientboostmvp
</VirtualHost>

启用了新创建的虚拟主机conf文件

sudo a2ensite new_config.conf
sudo /etc/init.d/apache2 restart

在apache2.config中添加了我的WSGIPythonPath

WSGIPythonPath /var/gradientboostmvp

保存更改,但仍无法加载我的静态文件

尝试3-导入服务

我也有一个类似的问题,被重复作为一个重复。我尝试了answers

中提供的解决方案
from django.views.static import serve
...
urlpatterns = [
    path('', classroom.home, name='home'),
    path('about', classroom.about, name='about'),
    path('courses', classroom.courses, name='courses'),
    path('course_details', classroom.course_details, name='course_details'),
    path('static',serve {'document_root':settings.STATIC_ROOT}),

这导致我尝试访问主页时收到错误消息

收到来自申请的不完整回复

python django static
1个回答
0
投票

嗯,当您使用Apache服务Django时,为什么不同时使用它服务静态文件。按照documetation,首先需要使用documetation将静态文件存储到特定文件夹。例如,在您的设置中,如果您将collectstatic指定为:

collectstatic

然后运行收集静态文件时,静态文件将存储在STATIC_ROOT目录中。

然后将该路径添加为apache的别名:

STATIC_ROOT
© www.soinside.com 2019 - 2024. All rights reserved.