web-dev-qa-db-ja.com

Hercの非標準フォルダーでGunicornプロセスを実行するようにProcfileを変更するにはどうすればよいですか?

私はherokuとgunicornが初めてなので、これがどのように機能するかわかりません。しかし、私はいくつかの検索を実行し、私は自分のDjangoアプリ(1.5.1)をデプロイするのに近づいていると思います。そのため、

web: gunicorn app.wsgi

私のディレクトリは少し違うので。ルートディレクトリでgunicornを実行できません

app_project
    requirements/
    contributors/
    app/
        app/
            settings/
            wsgi.py
        # Normally Procfile goes here
    Procfile

通常はapp /がルートディレクトリですが、このようにフォルダーを構造化して、Django appを他のものから分離します。herokuのルートディレクトリにProcfileを配置する必要があるため、それを認識するために、Procfileに何を入れるべきか、および/またはgunicornコマンドにどのパラメータを入れるべきか?

注意:

web: gunicorn app.wsgi # won't work because Procfile is in a directory above
                       # I also want to keep the directories as is
                       # I also don't want to create a secondary git inside the app folder just for heroku
web: gunicorn app.app.wsgi # won't work because I don't want to convert the folder into a python module
51
Derek

試してください:

web: gunicorn --pythonpath app app.wsgi
58

@Graham Dumpletonが彼の回答で述べたように、OPの問題は、Procfileを次のように変更することで解決できます。

web: gunicorn --pythonpath app app.wsgi

これが機能する理由:

  • Procfileは、Herokuがプロセスを開始するために使用するだけであることに注意してください。この場合、gunicornが処理されます。
  • Gunicornの--pythonpath引数を使用すると、モジュールのルックアップ時にPythonランタイムが検索するディレクトリのリストにディレクトリを動的にアタッチできます。
  • --pythonpath appをgunicornコマンドに追加することにより、インタープリターは基本的に、「appディレクトリ内を見て、wsgiというモジュールを含むappというパッケージ(または)を探すように指示されました。 `

OPの質問にあるフォルダーの総称名は、コマンドの構文を不明瞭にする可能性があります。これは次のようになります:gunicorn --pythonpath <directory_containing_package> <package>.<module>

詳細:
Gunicornドキュメンテーション

45
eikonomega

これを機能させるために醜いハックを作りました。だから私は私の答えを投稿するつもりですが、皆さんがより良い解決策を考え出せることを願っています

Procfile

web: sh ./app/run.sh

app_project/app/run.sh

#!/bin/bash

cd app
gunicorn app.wsgi
4
Derek

私はeikonomegaの答えが好きですが、同様の問題を解決する方法を追加したいと思います。

私のファイルがより多くのフォルダーにあったので、鉱山は少し困難でした

パスをPYTHONPATH環境変数に追加する代わりに、パッケージ内のモジュールを参照するように、パスを参照しました。

私の場合、appオブジェクトは、apps8-web-financial-graphフォルダー内のAnswersフォルダー内のscript1.pyにありました。

web: gunicorn app8-web-financial-graph.answers.script1:app
0
ButterHub