nginx - 在托管的 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(未找到)
解决方案
你确保你的设置显示这个:
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-install-nginx-on-ubuntu-18-04
推荐阅读
- laravel - AWS 上的 Laravel:不尊重 APP_DEBUG
- maxima - 使用 Maxima 对整数进行素数分解
- xpath - XPATH 消除字符
- javascript - VS Code Ctrl + S 删除格式 - 反应
- google-cloud-platform - 为什么 GCP 负载均衡器上的后端端口会自动更改为相同?
- mysql - 如何在mysql json列中查询对象的对象
- ios - 如何在不发送请求的情况下拦截 Moya 请求并返回失败响应
- javascript - 如何通过 Suitescript 2.0 在已保存搜索中应用多个过滤器?
- node.js - 抱歉,nodist 有问题。尝试启动新的 npm 项目时
- mysql - mySql SELECT GROUP_CONCAT 查询不返回长文本单元格中的所有数据