1

このブログでは、私のProcfile.

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

しかし、Heroku でプロジェクトを実行すると失敗します。これはから$ Heroku logsです:

app[web.1]: bash: bin/gunicorn_django: No such file or directory

したがって、gunicorn_djangoファイル/ディレクトリがありません。そのファイル/ディレクトリには何を含める必要があり、どこに配置する必要がありますか?

.
├── Procfile
├── myproject_django
│   ├── admin
│   ├── core
│   ├── __init__.py
│   ├── manage.py
│   ├── project_static
│   ├── settings.py
│   ├── templates
│   ├── urls.py
└── requirements.txt

編集

プロジェクトを変更するProcfileweb: python myproject_django/manage.py run_gunicorn -b 0.0.0.0:$PORT -w 3、正常に実行されます(静的ファイルも提供します)。

heroku run python myproject_django/manage.py collectstatic次に、heroku にプッシュしてから実行するとheroku open、静的ファイルを除いてサイトが提供されます。

ツリーstaticfiles(ディレクトリが空であることに注意してください)

.
├── Procfile
├── myproject_django
│   ├── admin
│   ├── core
│   │   ├── admin.py
│   │   ├── __init__.py
│   │   ├── models.py
│   │   ├── static
│   │   │   ├── css
│   │   │   │   ├── base.css
│   │   │   │   ├── layout.css
│   │   │   └── media
|   |   |       ├── pek.ico
|   │   │       ├── pek.png
|   │   │       ├── pek_symbol.png
│   │   ├── tests.py
│   │   ├── views.py
│   ├── __init__.py
│   ├── manage.py
│   ├── settings.py
│   ├── staticfiles
│   ├── templates
│   │   └── core
│   │       ├── 404.html
│   │       ├── 500.html
│   │       ├── home.html
│   │       └── install.html
│   ├── urls.py
└── requirements.txt

settings.py で

PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'static/media')
STATIC_ROOT = os.path.join(PROJECT_PATH,'staticfiles')
STATICFILES_DIRS = (
    os.path.join(PROJECT_PATH, 'core/static'),
)

Edit2 (Maxime R. へ)

最初の編集のセットアップから始めて、 を実行しpython myproject_django/manage.py collectstatic、heroku にプッシュしました。heroku openまだ静的ファイルを提供していません。画像をクリックするとDEBUG=True、404 エラーが返されます: request url: http://myproject_django.herokuapp.com/static/media/pyk1.png

Edit3 (Maxime R. へ)

ヒロクのログ

2012-08-18T10:18:37+00:00 heroku[web.1]: State changed from up to starting
2012-08-18T10:18:37+00:00 heroku[slugc]: Slug compilation finished
2012-08-18T10:18:38+00:00 heroku[web.1]: Starting process with command `python myproject_django/manage.py run_gunicorn -b 0.0.0.0:47262 -w 3`
2012-08-18T10:18:39+00:00 app[web.1]: /app/myproject_django
2012-08-18T10:18:39+00:00 app[web.1]: STATIC_ROOT: /app/myproject_django/staticfiles
2012-08-18T10:18:39+00:00 app[web.1]: STATICFILES_DIRS: '/app/myproject_django/core/static'
2012-08-18T10:18:39+00:00 app[web.1]: STATIC_ROOT: /app/myproject_django/staticfiles
2012-08-18T10:18:39+00:00 app[web.1]: STATICFILES_DIRS: '/app/myproject_django/core/static'
2012-08-18T10:18:39+00:00 app[web.1]: /app/myproject_django
2012-08-18T10:18:39+00:00 app[web.1]: 2012-08-18 05:18:39 [2] [INFO] Starting gunicorn 0.14.6
2012-08-18T10:18:39+00:00 app[web.1]: 2012-08-18 05:18:39 [2] [INFO] Listening at: http://0.0.0.0:47262 (2)
2012-08-18T10:18:39+00:00 app[web.1]: 2012-08-18 05:18:39 [2] [INFO] Using worker: sync
2012-08-18T10:18:39+00:00 app[web.1]: 2012-08-18 05:18:39 [5] [INFO] Booting worker with pid: 5
2012-08-18T10:18:39+00:00 app[web.1]: 2012-08-18 05:18:39 [6] [INFO] Booting worker with pid: 6
2012-08-18T10:18:39+00:00 app[web.1]: 2012-08-18 05:18:39 [7] [INFO] Booting worker with pid: 7
2012-08-18T10:18:39+00:00 app[web.1]: /app/myproject_django/app/myproject_django
2012-08-18T10:18:39+00:00 app[web.1]: /app/myproject_django
2012-08-18T10:18:39+00:00 app[web.1]: STATICFILES_DIRS: '/app/myproject_django/core/static'
2012-08-18T10:18:39+00:00 app[web.1]: STATIC_ROOT: /app/myproject_django/staticfilesSTATIC_ROOT: /app/myproject_django/staticfiles
2012-08-18T10:18:39+00:00 app[web.1]: STATICFILES_DIRS: '/app/myproject_django/core/static'
2012-08-18T10:18:39+00:00 app[web.1]: 
2012-08-18T10:18:39+00:00 app[web.1]: 
2012-08-18T10:18:39+00:00 app[web.1]: STATICFILES_DIRS: '/app/myproject_django/core/static'
2012-08-18T10:18:39+00:00 app[web.1]: STATIC_ROOT: /app/myproject_django/staticfiles
2012-08-18T10:18:40+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2012-08-18T10:18:40+00:00 heroku[web.1]: State changed from starting to up
2012-08-18T10:18:41+00:00 app[web.1]: 2012-08-18 05:18:41 [7] [INFO] Worker exiting (pid: 7)
2012-08-18T10:18:41+00:00 app[web.1]: 2012-08-18 05:18:41 [2] [INFO] Handling signal: term
2012-08-18T10:18:41+00:00 app[web.1]: 2012-08-18 05:18:41 [6] [INFO] Worker exiting (pid: 6)
2012-08-18T10:18:41+00:00 app[web.1]: 2012-08-18 05:18:41 [5] [INFO] Worker exiting (pid: 5)
2012-08-18T10:18:41+00:00 app[web.1]: 2012-08-18 05:18:41 [2] [INFO] Shutting down: Master
2012-08-18T10:18:42+00:00 heroku[web.1]: Process exited with status 0
2012-08-18T10:18:43+00:00 heroku[router]: GET myproject.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=36ms status=200 bytes=5474
2012-08-18T10:18:43+00:00 heroku[router]: GET myproject.herokuapp.com/static/media/pek.png dyno=web.1 queue=0 wait=0ms service=16ms status=404 bytes=2613
4

2 に答える 2

3

あなたが参照しているブログ投稿は、virtualenv が にインストールされた 2011 年 11 月にさかのぼります/app。新しいスタイルのvirtualenv commit により、仮想環境が から/appに移動しました/app/.heroku/venv

これは、最初のエラーを説明しています/app/.heroku/venv/bin/gunicorn_django。存在する必要があります。

これは悪い習慣です:

プッシュ後に静的ファイルを収集しても、静的ファイルを永続的に収集することはできません。ドキュメント、特に一時的なファイルシステムの部分を読んでください。2つの異なるdynoで実行すると、最初に収集されたものは2番目に利用できなくなり、編集で指摘した矛盾が説明されますcollectstaticopen

ファイルを収集して同じプロセスでサーバーを起動した場合にのみ機能します[web]が、dyno が再起動されるたびにすべての静的ファイルが再収集されます。ちょうど悪いデザインのように感じます。

また:

  • heroku にプッシュする前に静的ファイルを収集します
  • 別のソリューションを使用する (ブログ投稿の目的がそれを使用することではなかったとしても、S3 など)

とにかく、エレガントで効率的なワークフローで静的アセットを提供するのは簡単ではありません。

IMHO では、プロセスごとに 1 つのコマンドをProcfile使用することをお勧めします。コマンドを連鎖させたい場合は、デプロイのスクリプト作成を開始することをお勧めします。

于 2012-08-18T00:10:50.880 に答える
1

settings.pyにインストール済みアプリとしてgunicornがあることを確認してください。

実行してみてください:

python my_project/manage.py run_gunicorn <options>

于 2012-08-17T18:06:37.817 に答える