找不到静态文件 - 在 Heroku 上部署 Django

2023-12-04

我正在尝试在 Heroku 上部署 Django 站点,但在让应用程序查找我的静态文件时遇到问题。我用过python manage.py collectstatic将我的静态文件收集到 staticfiles 文件夹中,但我的应用程序似乎仍然无法找到它们。我的日志中继续出现这样的错误:

我不确定我是否正确引用了路径。代码中设置为图像/样式表/脚本的路径使用的是开发中使用的原始静态文件夹的路径。我是否必须重写所有这些路径以指向我使用创建的新 staticfiles 文件夹collectstatic命令,或者是否有其他问题可能导致此问题?

我的 settings.py 如下所示:

import os

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

DEBUG = False

ALLOWED_HOSTS = ['www.tomdeldridge.com']

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

ROOT_URLCONF = 'tomdeldridge.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['tomdeldridge/templates/tomdeldridge/'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'tomdeldridge.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

STATICFILES_DIRS = (
    os.path.join(
        os.path.dirname(__file__),
        'static',
    ),
)

STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

我的 wsgi.py 文件:

import os

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

application = Cling(get_wsgi_application())

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tomdeldridge.settings")

我的目录结构:

我尝试在模板中引用的图像肯定存在(当我在本地运行应用程序时它们工作正常。)我像这样引用它们:

{% static 'tomdeldridge/images/computer-2.png' %}

我是否必须使用像 nginx 这样的服务器来在部署中提供静态文件?我完全不知道从这里该去哪里,而且我不太确定为什么需要重新配置整个静态文件结构才能部署。


Install dj-static package

$ pip install dj-static

配置您的静态资源settings.py:

DEBUG = False
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

然后,更新您的wsgi.py使用 dj-static 的文件:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tomdeldridge.settings")

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

application = Cling(get_wsgi_application())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找不到静态文件 - 在 Heroku 上部署 Django 的相关文章

随机推荐

  • 使用ejabberd时有没有办法打包msg?

    我正在测试 ejabberd 的 mucroom 测试客户是Tsung 测试条件 一台ejabberd服务器 4核16G RAM 3000 个用户加入 1 个 mucroom 用户1分钟内随机发送一条消息 每个用户发送5条消息 服务器操作系
  • 将网页另存为PDF到指定目录

    我有它会打开 Internet Explorer 给用户 另存为 框 然后退出 但是 我更希望用户不必导航到正确的文件夹 而是目录来自工作表中的单元格并将网页另存为 PDF 我已经安装了完整的 Adob e 代码 Sub WebSMacro
  • 管理文件共享上的远程 DACL:Win32_ACE 到 Win32_Share

    目标 向现有文件共享添加本地用户帐户共享级读 写权限 我在开发这个方面遇到了障碍 显然 Microsoft 希望您将用户的 ACE 添加到 DACL 然后返回到共享的安全描述符中 1 不 NET SHARE ADD 不适用于现有共享 我很惊
  • 使用龙卷风处理标准输入

    如何监听 Tornado 循环中 stdin 上发生的事件 特别是 在龙卷风系统中 我想从标准输入中读取数据 对其做出反应 并在标准输入关闭时终止 同时 Tornado Web 服务也在同一进程上运行 在寻找这个时 我能找到的最相似的是处理
  • 电子邮件身份验证(Gmail、Yahoo 等)--android [重复]

    这个问题在这里已经有答案了 我对这个主题还很陌生 是否可以一次性验证所有电子邮件 ID 实际需要是我想在我的应用程序中验证电子邮件 gmail yahoo 等 一旦验证批准 它应该继续到我的应用程序 它可能是单点登录或其他什么 这可以做到吗
  • 将对象转换为派生类的对象

    我有课Record效果很好 public class Record protected string table protected string idcolumn public Record string table string idc
  • 如何让awk忽略双引号内的字段分隔符? [复制]

    这个问题在这里已经有答案了 我需要删除逗号分隔值文件中的 2 列 考虑 csv 文件中的以下行 email protected www example com field2 field3 field4 email protected fie
  • 如何在 React 中循环一个对象?

    React 新手 尝试循环对象属性 但 React 抱怨对象不是有效的 React 子对象 有人可以给我一些关于如何解决此问题的建议吗 我已经添加了 createFragment 但不完全确定需要去哪里或者我应该采取什么方法 JS var
  • 获取 mongoid 生成的原始 mongo db 查询表达式

    我想获取 mongoid 生成的 mongo 查询表达式该怎么做 例如这是 mongoid 语法 History where report type params report type order by ts 1 only ts last
  • 在 MVC4 中使用 DotNetOpenAuth 获取 Twitter 访问密钥

    我正在使用 MVC4 创建一个应用程序 该应用程序将授权用户使用 Twitter 并允许他们也从该应用程序发送推文 我可以使用 MVC4 中的BuiltInOAuthClient Twitter 毫无问题地对用户进行身份验证 http ww
  • 如何在 Web Api 中手动执行 Breeze 过滤器?

    我想使用一些外部服务器端逻辑来修改查询结果的属性 为此 我需要应用 Breeze 查询选项 修改结果集并返回它 我基本上知道如何申请OdataQueryOptions我的查询 但我不想错过 BreezeJS 所做而 Web Api 的 OD
  • PHP 两次获取数据

    我的功能看起来就是这样 private function generateTree courseID q SELECT l id l name AS lesson name c name AS course name FROM lesson
  • 什么意思 ”!”在 require.js 中

    什么意思 当我包含模块时在 require js 中 语法是什么 在我的项目中包含动态样式表 我发现https github com martinsb require css插入 效果很好 require css css sample cs
  • 目标版本 1.8 无效

    我尝试在 OPENSHIFT 上部署我的应用程序 但 Maven 无法编译它并出现错误 目标版本 1 8 无效 我的 构建 action hook export JAVA HOME OPENSHIFT DATA DIR jdk1 8 0 0
  • Web 服务上的 X509Certificate2 验证

    我正在开发 WCF Web 服务 用于检查 XML 签名中的证书是否有效 XML 使用合格且有效的 X509 证书进行签名 当我在 Visual Studio 开发环境中运行服务时 X509Certificate2 Verify 和 X50
  • 无状态 Spring MVC

    我目前正在阅读 Spring in Action 第三版 并且一直在尝试 Spring MVC 一切正常 直到我尝试将示例 Web 应用程序 移植 到无状态 Web 应用程序 为了确定是否创建了会话对象 我在 URL映射 只打印出req g
  • 使用 jQuery 加载图像并将其附加到 DOM

    我正在尝试从给定的链接加载图像 var imgPath imgLink attr href 并将其附加到页面上 这样我就可以将其插入到给定元素中对于图像查看器 尽管我搜索过堆栈溢出和jQuery文档没有尽头 我无法弄清楚 加载图像后 我想设
  • 保护C++程序免遭反编译[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以反编译C Builder exe C Builder exe 安全吗 我使用 Microsoft Visual C 2010 Express 来编写程序 当我想分发我的程序时 我使用 发布 配
  • 如何处理JPA命名查询中数字类型的空值

    我想将两个参数传递给namedquery 一种是数字类型 另一种是字符串类型 它们都可以为空 例如 id null username joe 和 id 1 username joe 是两个不同的结果 在namedQuery中 如果id为nu
  • 找不到静态文件 - 在 Heroku 上部署 Django

    我正在尝试在 Heroku 上部署 Django 站点 但在让应用程序查找我的静态文件时遇到问题 我用过python manage py collectstatic将我的静态文件收集到 staticfiles 文件夹中 但我的应用程序似乎仍