我很难在网页上显示我的静态文件,将我的网站托管在digitalocean ubuntu 18上,并且我的静态文件存储在digitalocean空间中。最初,一切正常,并且可以正常工作,直到我向服务器添加了3个新图像并随后运行collectstatic命令,注意这是第二次,因为我第一次运行它是将文件存储在我创建的digitalocean空间文件夹中。 collectstatic命令向我显示警告说
UserWarning:S3Boto3Storage的默认行为不安全,并且在django-storages 2.0中会更改。默认情况下,文件和新存储区的ACL为“公开读取”(全球公开可读)。 2.0版将默认使用存储桶的ACL。要选择新行为,请设置AWS_DEFAULT_ACL = None,否则,要使此警告静音,请显式设置AWS_DEFAULT_ACL。 “ S3Boto3Storage的默认行为是不安全的,并且会更改”。
在我继续输入yes之后,文件是图像已成功存储在数字空间中,但是自从我第二次运行collect命令以来,所有静态文件都没有显示。我对此警告做了进一步的阅读,并使用了AWS S3 and Django returns "An error occurred (AccessDenied) when calling the PutObject operation"中的解决方案,但警告仍然消失了,但仍然找不到静态文件。
这是从chrome浏览器发出的错误消息:无法加载资源:服务器以状态404(未找到)进行了响应
答案 0 :(得分:0)
您确保设置显示以下内容吗?
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
答案 1 :(得分:0)
我在django项目中使用digitalocean中的nginx服务器。 前端静态文件正在运行,但管理员无法运行。
查看我的静态文件设置:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
静态文件夹和Collectstatic目标文件夹中的前端CSS是staticfiles
所以我们的主要重点是STATIC_ROOT表示staticfiles文件夹。在nginx设置中,将“ staticfiles”而不是“ static”设置为静态文件位置。
您的STATIC_ROOT文件夹名称可以是您需要在nginx中使用相同名称的任何名称。
有关nginx设置,请参见以下代码:
location /staticfiles/ {
root /home/[your_username]/[your_project_folder];
}
[您的用户名]:您将其用于在digitalocean上托管项目。
整个问题是,您需要在nginx设置中使用STATIC_ROOT文件夹。
创建/编辑nginx设置的命令为:
sudo nano /etc/nginx/sites-available/[your_project_folder]