【问题标题】:Why is collectstatic adding back files I deleted to my Wagtail project?为什么 collectstatic 将我删除的文件添加回我的 Wagtail 项目?
【发布时间】:2021-09-22 23:58:20
【问题描述】:

因此,我将 Wagtail 项目部署到 DigitalOcean 上的 droplet,并且由于后处理失败,collectstatic 步骤一直失败。我不需要失败的目录,所以我从我的项目中删除了它。但不知何故,每次我尝试运行 collectstatic 时,旧目录都会不断返回,并且后处理在一个不再存在但似乎以某种方式困扰我的服务器的文件上不断失败。

这是我尝试过的事情:

  1. 完全删除静态目录
  2. 从我的存储库中删除有问题的目录(peakjob)并运行 git clean 以从我的服务器中删除所有未跟踪的文件
  3. 删除我的整个项目目录,创建一个新的 virtualenv 并克隆我的项目的新副本,并删除有问题的目录
  4. 注销我的服务器并重新登录
  5. 运行 collectstatic --clear(运行时它似乎没有删除任何内容)
  6. 退出终端并重新启动,然后重新登录到我的服务器
  7. 销毁我的整个 droplet,然后创建一个新的,创建一个新的 virtualenv 并克隆我的项目的新副本,其中不包含有问题的目录。

每当我运行 collectstatic 时,它仍然会以某种方式重新添加我删除的有问题的目录,并且即使在我炸毁所有内容并开始全新部署之后也失败了。 Django中是否有一些类似缓存的东西需要清除? Django 还能在哪里引用这个不再存在的目录?如果有人有任何想法,我会全力以赴。

这里是错误代码日志,任何想要查看的人都可以查看:

Post-processing 'oldcodingprojects/peakjob/css/font-awesome.min.css' failed!

Traceback (most recent call last):

File "manage.py", line 24, in <module>
    main()
  File "manage.py", line 20, in main
    execute_from_command_line(sys.argv)
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 187, in handle
    collected = self.collect()
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 134, in collect
    raise processed
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 288, in _post_process
    content = pattern.sub(converter, content)
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 187, in converter
    hashed_url = self._url(
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 126, in _url
    hashed_name = hashed_name_func(*args)
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 338, in _stored_name
    cache_name = self.clean_name(self.hashed_name(name))
  File "/home/mkvportfolio/mvportfolio/.venv/lib/python3.8/site-packages/django/contrib/staticfiles/storage.py", line 88, in hashed_name
    raise ValueError("The file '%s' could not be found with %r." % (filename, self))

【问题讨论】:

    标签: django wagtail collectstatic


    【解决方案1】:

    很难说到底出了什么问题。

    collectstatic 是一个 Django 命令。鹡鸰似乎无关。

    假设您有以下设置:

    STATIC_ROOT = BASE_DIR / "static"
    STATIC_URL = "/static/"
    

    您的网络服务器应配置为直接从STATIC_ROOT 目录处理以/static/ 开头的请求。所有其他请求都应该指向 Django 应用程序。网络服务器不应该提供存在于虚拟环境中的文件。

    这就是collectstatic 的用武之地。它会将静态文件从虚拟环境和您的项目复制到STATIC_ROOT 目录。让它们公开可用。

    之后,复制一些文件存储后端可能会执行后处理步骤。例如,创建唯一哈希并使缓存无效。

    为什么collectstatic 会尝试发布一个不存在的文件。由 collectstatic 本身复制到那里的文件?

    • print(STATIC_ROOT) 放入您的设置中,然后运行collectstatic。将打印确切的目录。
    • 检查目录,是否存在?是否有正确的读写权限?
    • 列出目录的内容,看看预期的文件是否可用。
    • 运行collectstatic --no-post-process,只是后处理步骤吗?
    • 在预期位置创建一个空的font-awesome.min.css
    • collectstatic 在您的本地计算机上,它也会失败吗?
    • ...

    调试愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2019-12-07
      • 2019-03-25
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多