如何用heroku托管静态文件,给我一个错误

Posted

技术标签:

【中文标题】如何用heroku托管静态文件,给我一个错误【英文标题】:how to host static files with heroku, giving me an error 【发布时间】:2020-10-14 04:57:26 【问题描述】:
`python manage.py collectstatic Traceback (most recent call last):   File "manage.py", line 21, in <module>
    main()   File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 187, in handle
    collected = self.collect()   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 104, in collect
    for path, storage in finder.list(self.ignore_patterns):   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/contrib/staticfiles/finders.py", line 130, in list
    for path in utils.get_files(storage, ignore_patterns):   File "/home/jet/venvfordjango/lib/python3.7/site-packages/django/contrib/staticfiles/utils.py", line 23, in get_files
    directories, files = storage.listdir(location)   File "/home/jet/venvfordjango/lib/python3.7/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: '/home/jet/myapp/static'`

我的 settings.py 看起来像这样

    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  
    
    .......
    
    # Static files (CSS, javascript, Images)
    # https://docs.djangoproject.com/en/1.9/howto/static-files/
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATIC_URL = '/static/'
    
    # Extra places for collectstatic to find static files.
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    ........

MEDIA_ROOT= os.path.join(BASE_DIR, 'media/')
MEDIA_URL= "/media/"

那么问题出在哪里?准备根据要求添加更多资源 提前致谢

【问题讨论】:

如果问题不清楚,我很抱歉,但我可以根据要求进一步解释 您已经在本地执行脚本时遇到了问题,或者您对本地路径进行了硬编码。 /home/jet 不是 Heroku 提供的路径。 问题仍然是本地的,当我尝试使用 heroku 时它变得更糟 如果您使用 Heroku 标记某些内容,则期望它在本地工作。 FileNotFoundError: [Errno 2] No such file or directory: '/home/jet/myapp/static' 验证它是否存在并验证您的程序有足够的权限来读取该目录。 【参考方案1】:

此错误的原因是您使用了对项目静态文件夹中不存在的某些文件的引用。您需要删除这些引用或创建虚拟文件(以防它们不重要)以使 collectstatic 成功执行。同样在这种情况下,我认为您需要在 URL 中注册静态文件,如果您已经这样做了,请确保在该注册的基本静态目录中存在一个名为 myapp 的目录。 在再次推送到 heroku 之前,您应该尝试在本地运行命令 python manage.py collectstatic。另一种解决方法可能是使用heroku config:set DISABLE_COLLECTSTATIC=1 禁用 collectstatic,尽管这不是正确的方法 详情请参考:Collectstatic error while deploying Django app to Heroku

【讨论】:

以上是关于如何用heroku托管静态文件,给我一个错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 中使用静态 IP 来托管 Discord 机器人

在 Heroku 上部署 Django/静态文件的正确方法

在 Heroku 服务器上部署 Django 错误 (500) - 据说是静态文件问题

如何用webstorm来检查静态代码

如何用护照保护快递中的静态文件夹

如何用Tomcat部署前端静态文件