Heroku在部署时按预期执行collectstatic?

时间:2013-01-10 08:55:08

标签: python django heroku

我有Django设置来收集我的静态文件并使用django-storage将它们复制到S3中,这在我明确运行时就像一个魅力

heroku run python manage.py collectstatic

但是,我希望Heroku在部署时自动执行此操作(即git push to Heroku),如本文档https://devcenter.heroku.com/articles/django-assets中所述。显然,输出:

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

确定是否正确配置了collectstatic(当我明确地运行它时,collectstatic正常工作)。我明白了:

$ heroku run python manage.py collectstatic --dry-run --noinput
Running `python manage.py collectstatic --dry-run --noinput` attached to terminal... up, run.9607
Pretending to copy '/app/app_pkg/static/robots.txt'
.... # Lot of similar outputs not shown
16 static files copied.

对我来说看起来很好,但文档没有说明我应该看到的内容。当我部署项目时,一切似乎都运行良好并且成功完成。

-----> Installing dependencies using Pip (1.2.1)
       Cleaning up...
-----> Collecting static files
       16 static files copied.

-----> Discovering process types
       Procfile declares types -> web

但是我的S3存储桶中没有显示这些文件。如果我然后明确地运行

heroku run python manage.py collectstatic

所有文件都显示在S3存储桶中。我认为Heroku应该为我执行此操作,我不确定为什么不是。这是预期的行为吗?我应该自己做吗?

1 个答案:

答案 0 :(得分:5)

Odd还没有人回复你!只需将其添加到Procfile的开头:

web: python manage.py collectstatic --noinput

每次在Heroku上部署应用程序时,都会运行python manage collectstatic。

最干净的方法是将它链接到现有的Procfile,如下所示:

web: python my_django_app/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT my_django_app/settings.py

感谢Matthew Phiong& his awesome blog post