【问题标题】:static-files 404 not found on hosted django app在托管的 django 应用程序上找不到静态文件 404
【发布时间】:2019-12-17 16:12:04
【问题描述】:

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

用户警告:S3Boto3Storage 的默认行为是不安全的,将在 django-storages 2.0 中更改。默认情况下,文件和新存储桶使用“public-read”(全局公开可读)的 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(未找到)

【问题讨论】:

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


    【解决方案1】:

    您是否确保您的设置显示如下:

    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

    【讨论】:

    • 我一直在使用这些教程,然后跟随一个更新的教程版本,它为静态文件配置了所谓的数字海洋空间,但似乎无法让事情正常工作,我一直收到 404 错误
    【解决方案2】:

    我在 digitalocean 中为我的 django 项目使用 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];
    }
    

    [your_username]:您用于在 digitalocean 上托管您的项目。

    整件事就是,你需要在 nginx 设置中使用你的 STATIC_ROOT 文件夹。

    创建/编辑 nginx 设置的命令是:

    sudo nano /etc/nginx/sites-available/[your_project_folder]
    

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 2021-01-25
      • 2017-09-13
      相关资源
      最近更新 更多