我有一个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 回答
看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命令并查看它们的环境是否存在问题?
如果此操作失败,它将为您提供错误或回溯以查看并进一步诊断问题 .
看看Django and Static Assets . 它似乎最近更新,您可以使用此dj-static包很好地提供静态文件 .
试试这三件事:
创建此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把它扔出去,因为愚蠢的错误发生了:
我花了很多时间试图弄清楚为什么我的模块在本地工作正常时没有找到它,只是意识到它被
.slugignore
的条目忽略了