在托管的Django应用中找不到静态文件404

时间:2019-12-17 16:12:04

标签: nginx amazon-s3 digital-ocean ubuntu-18.04 django-staticfiles

我很难在网页上显示我的静态文件,将我的网站托管在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(未找到)进行了响应

2 个答案:

答案 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-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

答案 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]