1

静的ファイルを収集し、django-storagesを使用してS3にコピーするようにDjangoをセットアップしました。これは、明示的に実行すると魅力のように機能します。

heroku run python manage.py collectstatic

ただし、このドキュメントhttps://devcenter.heroku.com/articles/django-assetsで説明されているように、Herokuはデプロイ時にこのアクションを自動的に実行することを期待しています(つまり、Herokuへのgitプッシュ)。どうやら、の出力:

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がこのアクションを実行する必要があると思いますが、なぜそうではないのかわかりません。これは予想される動作ですか?自分でやる必要がありますか?

4

1 に答える 1

6

奇妙なことに、まだ誰もあなたに答えていません! これをProfileの先頭に追加するだけです:

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 と彼の素晴らしいブログ投稿に送られます

于 2013-02-16T15:24:55.737 に答える