【问题标题】:Trying to deploy django app to heroku and having an issue with collect static storage.py path尝试将 django 应用程序部署到 heroku 并遇到收集静态 storage.py 路径的问题
【发布时间】:2021-06-05 00:36:58
【问题描述】:

我正在尝试将 django 项目部署到 heroku 并且很难处理静态文件。我已经正确设置了所有内容,因为它过去对我有用。我不确定这次是什么问题。

以下是我的回溯。这似乎与静态文件路径有关,但如果我的 STATIC ROOT 和 URL 正确,它不应该有问题吗?

-----> $ python manage.py collectstatic --noinput

   Traceback (most recent call last):

     File "manage.py", line 22, in <module>

       main()

     File "manage.py", line 18, in main

       execute_from_command_line(sys.argv)

     File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line

       utility.execute()

     File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 395, in execute

       self.fetch_command(subcommand).run_from_argv(self.argv)

     File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 330, in run_from_argv

       self.execute(*args, **cmd_options)

     File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 371, in execute

       output = self.handle(*args, **options)

     File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 194, in handle

       collected = self.collect()

     File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 109, in collect

       for path, storage in finder.list(self.ignore_patterns):

     File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/finders.py", line 130, in list

       for path in utils.get_files(storage, ignore_patterns):

     File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/staticfiles/utils.py", line 23, in get_files

       directories, files = storage.listdir(location)

     File "/app/.heroku/python/lib/python3.6/site-packages/django/core/files/storage.py", line 316, in listdir

       for entry in os.scandir(path):

   FileNotFoundError: [Errno 2] No such file or directory: '/tmp/build_0728dd1c_/static'

请帮忙。我知道使用 heroku 部署静态文件是一场噩梦,但我尝试了所有的故障排除,但仍然无法解决这里的问题。

提前致谢。

编辑:被告知添加静态设置...

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')


# Base url to serve media files
MEDIA_URL = '/media/'

# Path where media is stored
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

【问题讨论】:

  • 您是否偶然将STATICFILES_DIRS 放入您的settings.py 并放入/static/BASEDIR / 'static' 中?
  • 请分享STATICFILES_DIRSSTATIC_ROOT

标签: python django web heroku


【解决方案1】:

请确保您在settings.py 文件中正确配置了此变量:

import os
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATIC_URL = '/static/'

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]


MEDIA_URL = '/images/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images')

尝试使用pip install whitenoise 安装whitenoise,然后将此行添加到settings.py 中的MIDDLEWARE 列表中:'whitenoise.middleware.WhiteNoiseMiddleware',

将此变量与静态变量一起添加:

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

不要忘记在你的 requirements.txt 文件中添加白噪声。

【讨论】:

  • 是的,它的配置正确。这就是为什么我不知道问题是什么。会不会是我有一个 github 存储库,然后尝试推送到 heroku 存储库?它可能已经创建了两个静态目录?
  • 这不是问题
  • 如果我禁用 collect static 它会部署,但我仍然从 heroku 收到应用程序错误并告诉我检查日志
  • 我已经更新了答案,再试一次。不要禁用收集静态
  • 我想我已经找到了一种方法来收集静态文件并立即交付它们。我在本地运行收集静态并让它工作然后推动它,但我的蛞蝓现在太大了。当我检查测功机时,它显示我几乎有 2 个应用程序之类的东西?
猜你喜欢
  • 2021-03-24
  • 2016-08-08
  • 2020-11-22
  • 2016-08-27
  • 2021-07-23
  • 2017-05-03
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多