私は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
試してください:
web: gunicorn --pythonpath app app.wsgi
@Graham Dumpletonが彼の回答で述べたように、OPの問題は、Procfileを次のように変更することで解決できます。
web: gunicorn --pythonpath app app.wsgi
これが機能する理由:
--pythonpath
引数を使用すると、モジュールのルックアップ時にPythonランタイムが検索するディレクトリのリストにディレクトリを動的にアタッチできます。--pythonpath app
をgunicornコマンドに追加することにより、インタープリターは基本的に、「appディレクトリ内を見て、wsgiというモジュールを含むappというパッケージ(または)を探すように指示されました。 `OPの質問にあるフォルダーの総称名は、コマンドの構文を不明瞭にする可能性があります。これは次のようになります:gunicorn --pythonpath <directory_containing_package> <package>.<module>
これを機能させるために醜いハックを作りました。だから私は私の答えを投稿するつもりですが、皆さんがより良い解決策を考え出せることを願っています
Procfile
web: sh ./app/run.sh
app_project/app/run.sh
#!/bin/bash
cd app
gunicorn app.wsgi
私はeikonomegaの答えが好きですが、同様の問題を解決する方法を追加したいと思います。
私のファイルがより多くのフォルダーにあったので、鉱山は少し困難でした
パスをPYTHONPATH環境変数に追加する代わりに、パッケージ内のモジュールを参照するように、パスを参照しました。
私の場合、appオブジェクトは、apps8-web-financial-graphフォルダー内のAnswersフォルダー内のscript1.pyにありました。
web: gunicorn app8-web-financial-graph.answers.script1:app