【问题标题】:Heroku collectstatic not run during deploymentHeroku collectstatic 在部署期间未运行
【发布时间】:2013-03-29 04:37:14
【问题描述】:

我有一个 django 应用程序,我成功地将其部署到 heroku。当我在本地干运行 collectstatic 命令时,一切正常。

python manage.py collectstatic --dry-run --noinput
....
Pretending to copy '/Users/hari/.virtualenvs/bsc2/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/admin/ordering.js'
Pretending to copy '/Users/hari/.virtualenvs/bsc2/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js'

71 static files copied.

尽管这个 ..my django admin staticfiles 没有被使用,我在 heroku 上获得了一个简单的 django 管理站点,其中 Debug 设置为 False。

如果我将 Debug 设置为 True,我会在 heroku 上获得一个“丰富”的管理站点。将 Debug 设置为 True 或 False “git push heroku master” 命令终端输出没有任何关于收集静态文件的内容。

我尝试了使用 Heroku 的 gunicorn 的示例“helloworld”应用程序,它确实显示了“收集静态”消息。我还尝试将此代码 sn-p 插入到我的 urls.py 中。但这也无济于事。

从 django.conf 导入设置

if not settings.DEBUG:
    urlpatterns += patterns('',
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),

接下来,我尝试将以下内容添加到我的 heroku 配置中

heroku config:add DISABLE_COLLECTSTATIC=0

但这也没有显示我的 django 管理站点的所有样式。

最后,我尝试使用我的 Procfile 切换到 gunicorn,但也没有显示管理员样式。只有设置 Debug=True 才能显示我的管理员样式。

我在 Heroku 上使用 Django 1.4.2 和 1.5.1 进行了尝试,但都没有向我显示“正常”管理站点。有什么办法可以在不走 S3 路线的情况下将我的管理文件放在 heroku 上。

【问题讨论】:

    标签: django heroku django-admin


    【解决方案1】:

    命令终端输出没有关于收集静态文件的任何内容。

    查看heroku-buildpack-python:bin/steps/collectstatic,它似乎尝试执行collectstatic --dry-run --noinput 并将其输出通过管道传输到/dev/null,然后再显示-----&gt; Collecting static files 消息。这意味着,如果您的本地机器上没有出现错误,您将永远不会在 heroku 上看到错误:它将默默地失败。 (最好的失败;)

    您是否尝试过运行一次性工作者来测试 collectstatic 命令并查看其环境是否存在问题?

    heroku run python manage.py collectstatic --dry-run --noinput
    

    如果这失败了,它会给你一个错误或回溯来调查和进一步诊断问题。

    【讨论】:

    • 感谢 Thomas,运行命令“heroku run python manage.py collectstatic --dry-run --noinput”给我一个错误“OSError: [Errno 2] No such file or directory:'/ app/bsc2/assets'" .
    • 应该有一个同名的文件夹吗?当您在本地计算机上删除该目录时会发生什么?你得到同样的错误吗?
    • 感谢 Thomas,运行命令“heroku run python manage.py collectstatic --dry-run --noinput”给我一个错误“OSError: [Errno 2] No such file or directory:'/应用程序/bsc2/assets'" 。我确实有一个空的资产目录,但我没有意识到 git 不会结帐(因为它是空的)。一旦我触摸了该目录中的 Readme.txt "touch bsc2/bsc2/assets/Readme.txt" 并提交并推送了..heroku 就可以看到该目录。现在我得到“收集静态文件”消息,尽管 Debug 设置为 False,但重要的是丰富的管理站点......抱歉,评论政策在您发表评论之前阻止了编辑
    • 啊!我以前被这种 git 行为咬过。很高兴这一切都为你解决了!
    【解决方案2】:

    查看Django and Static Assets。它似乎最近更新了,您可以使用这个dj-static 包很好地提供静态文件。

    【讨论】:

      【解决方案3】:

      试试这三件事:

      • 创建这个 Heroku 配置变量:DJANGO_SETTINGS_MODULE myapp.settings.prod 的值--或适合您的 Heroku 设置文件
      • 按照 Heroku 文档中的说明使用 Whitenoise: https://devcenter.heroku.com/articles/django-assets
      • 签入并重新部署您的测功机:git push heroku master

      我发现我错过了第一项,DJANGO_SETTINGS_MODULE" 例如,命令行 collectstatic 可以工作,但没关系 b/c 这是一个短暂的测功机

      【讨论】:

        【解决方案4】:

        把它扔在那里,因为会发生愚蠢的错误:

        我花了很多时间试图弄清楚为什么我的模块在本地运行良好时在 heroku 上找不到,结果发现它被 .slugignore 的条目忽略了

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-24
          • 2013-11-30
          • 1970-01-01
          • 2021-05-13
          • 2016-02-01
          • 2016-04-11
          • 1970-01-01
          • 2020-04-30
          相关资源
          最近更新 更多