首页 文章

Heroku collectstatic在部署期间不运行

提问于
浏览
5

我有一个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.

尽管如此..我的django管理静态文件不会被使用,我在heroku上得到一个简单的django管理站点,Debug设置为False .

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

我尝试了一个示例“helloworld”应用程序,该应用程序使用来自Heroku的gunicorn并且确实显示了“收集静态”消息 . 我也尝试将此代码片段插入到我的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上 .

4 回答

  • 1

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

    heroku-buildpack-python:bin/steps/collectstatic似乎它试图在显示 -----> Collecting static files 消息之前尝试做 collectstatic --dry-run --noinput 并将其输出管道输出到 /dev/null . 这意味着如果您的本地方框中没有错误, you will never see the error on heroku : it will silently fail . (最好的失败;)

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

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

    如果此操作失败,它将为您提供错误或回溯以查看并进一步诊断问题 .

  • 10

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

  • 0

    试试这三件事:

    • 创建此Heroku配置变量: DJANGO_SETTINGS_MODULE ,其值为 myapp.settings.prod - 或者适合您的Heroku设置文件

    • 使用Heren文档中描述的Whitenoise:https://devcenter.heroku.com/articles/django-assets

    • 检查并重新部署您的dyno: git push heroku master

    我发现我错过了第一个项目, DJANGO_SETTINGS_MODULE “例如,命令行collectstatic会工作,但这无关紧要b / c这是一个短暂的dyno

  • 2

    把它扔出去,因为愚蠢的错误发生了:

    我花了很多时间试图弄清楚为什么我的模块在本地工作正常时没有找到它,只是意识到它被 .slugignore 的条目忽略了

相关问题