Heroku collectstatic在部署期间不运行

时间:2013-04-06 21:42:18

标签: django heroku django-admin

我有一个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”命令终端输出没有关于收集静态文件的任何内容。

我尝试了使用Heroku的gunicorn并且显示“收集静态”消息的示例“helloworld”应用程序。我也尝试将此代码段插入到我的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 个答案:

答案 0 :(得分:10)

  

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

查看heroku-buildpack-python:bin/steps/collectstatic,它似乎尝试执行collectstatic --dry-run --noinput并在显示/dev/null消息之前将其输出传递给-----> Collecting static files。这意味着,如果您的本地方框中没有错误,您将永远不会在heroku上看到错误:它将无声地失败。 (最好的失败;)

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

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

如果失败,它会给你一个错误或追溯,以查看并进一步诊断问题。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

尝试这三件事:

  • 使用a创建此Heroku配置变量:DJANGO_SETTINGS_MODULEmyapp.settings.prod - 或适用于您的Heroku设置文件
  • 按照Heroku文档中的说明使用Whitenoise: https://devcenter.heroku.com/articles/django-assets
  • 检入并重新部署您的dyno:git push heroku master

我发现我错过了第一项DJANGO_SETTINGS_MODULE&#34;例如,命令行collectstatic会起作用,但这并不重要b / c这是一个短暂的dyno

答案 3 :(得分:0)

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

我花了很多时间试图弄清楚为什么我的模块在本地工作正常时没有找到,只是意识到它被return {hash(char): char for char in characters}

的条目忽略了