首页 > 解决方案 > 在托管的 django 应用程序上找不到静态文件 404

问题描述

我很难在我的网页上显示我的静态文件,我在 digitalocean ubuntu 18 上托管我的网站,我的静态文件存储在 digitalocean 空间中。最初一切正常并且工作正常,直到我向服务器添加 3 个新图像并随后运行 collectstatic 命令,请注意这是第二次因为我第一次运行它以将文件存储在我创建的数字海洋空间文件夹中。collectstatic 命令向我显示了一条警告信息

UserWarning:S3Boto3Storage 的默认行为是不安全的,将在 django-storages 2.0 中更改。默认情况下,文件和新存储桶使用“public-read”(全局公开可读)的 ACL 保存。2.0 版将默认使用存储桶的 ACL。要选择加入新行为,请设置 AWS_DEFAULT_ACL = None,否则要使此警告静音,请显式设置 AWS_DEFAULT_ACL。“S3Boto3Storage 的默认行为是不安全的,将会改变”

在我继续输入yes之后,文件是图像已成功存储在数字空间中,但是自从我第二次运行collect命令以来,所有静态文件都没有显示。我对这个警告做了一些进一步的阅读,并使用了来自AWS S3 的解决方案,Django 返回“调用 PutObject 操作时发生错误(AccessDenied)”但仍然没有任何改变,警告消失了,但仍然找不到静态文件。

这是来自 chrome 浏览器的错误消息:加载资源失败:服务器响应状态为 404(未找到)

标签: nginxamazon-s3digital-oceanubuntu-18.04django-staticfiles

解决方案


你确保你的设置显示这个:

STATIC_ROOT = os.path.join('static')

STATIC_URL = '/static/'

在此之后,您的模板应显示以下内容:

<link rel="stylesheet" type="text/css" href="{% static '/locationofstatics/css/style.css' %}">
<link rel="stylesheet" type="text/css" href="{% static '/locationofstatics/css/bootstrap.css' %}">

在我看来,最好的处理方式是仅在本地收集,然后将所有本地文件和目录推送到服务器。您目前使用什么将文件传输到服务器端?

您需要做的另一件事是确保 Nginx 在站点可用文件中设置了静态文件的位置。从您的 ssh 终端(服务器端终端),您可以输入:

sudo nano /etc/nginx/sites-available/projectname

在此您需要添加静态的位置,例如:

server {

ocation /static/ {
        root /home/name/projectname;
    }
}

以下文档非常有用:

https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04

https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04


推荐阅读