私はansibleをプロビジョニングしていますVM https://github.com/jcalazan/ansible-Django-stack ですが、何らかの理由でGunicornを起動しようとすると、次のエラー:
/path/to/my/gunicorn.sockに接続できません
そしてnginxログファイルで:
上流への接続中にunix:/path/to/my/gunicorn.sockへのconnect()が失敗しました(2:そのようなファイルまたはディレクトリはありません)
そして実際には、指定されたディレクトリにソケットファイルがありません。ディレクトリの権限を確認しましたが、問題ありません。
これが私のgunicorn_startスクリプトです。
NAME="{{ application_name }}"
DJANGODIR={{ application_path }}
SOCKFILE={{ virtualenv_path }}/run/gunicorn.sock
USER={{ gunicorn_user }}
GROUP={{ gunicorn_group }}
NUM_WORKERS={{ gunicorn_num_workers }}
# Set this to 0 for unlimited requests. During development, you might want to
# set this to 1 to automatically restart the process on each request (i.e. your
# code will be reloaded on every request).
MAX_REQUESTS={{ gunicorn_max_requests }}
echo "Starting $NAME as `whoami`"
# Activate the virtual environment.
cd $DJANGODIR
. ../../bin/activate
# Set additional environment variables.
. ../../bin/postactivate
# Create the run directory if it doesn't exist.
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Programs meant to be run under supervisor should not daemonize themselves
# (do not use --daemon).
exec gunicorn \
--name $NAME \
--workers $NUM_WORKERS \
--max-requests $MAX_REQUESTS \
--user $USER --group $GROUP \
--log-level debug \
--bind unix:$SOCKFILE \
{{ application_name }}.wsgi
誰かが欠落しているソケットファイルを引き起こす可能性がある他のものを提案できますか?
ありがとう
ええと、私にはコメントするのに十分な担当者がいないので、ここでは、ソケットの欠如による具体的な提案は多くないことを述べますが、私がどのようにして靴を履いて始めて、作業。
それの長くて短いことは、upistartによって実行されたときにgunicornが問題に遭遇し、立ち上がって実行されなかったか、シャットダウンされなかったことです。問題を追跡するための詳細情報を取得するのに役立ついくつかの手順を次に示します。
ps auxf | grep gunicorn
を試して、ワーカーがいるかどうかを確認します。私はしませんでした。grep init: /var/log/syslog
は、リスポーンが速すぎたため、gunicornサービスが停止していたことがわかりましたが、 conf。とにかく、あなたはそこに何かを見つけるかもしれません。Gunicornが実行に失敗したか、エラーをログに記録していないことを確認した後、コマンドラインから実行することにしました。 manage.pyが存在するディレクトリに移動し、gunicornインスタンスに対してupstartコマンドの拡張バージョンを実行します。次のようなもの(私が使用するゴミの代わりに、すべての変数を適切な同腹子に置き換えます)。
/path/to/your/virtualenv/bin/gunicorn --name myapp --workers 4 --max-requests 10 --user appuser --group webusers --log-level debug --error-logfile /somewhere/I/can/find/error.log --bind unix:/tmp/myapp.socket myapp.wsgi
運が良ければ、pythonトレースバックを取得するか、コマンドを手動で実行した後、gunicornエラーログで何かを見つけることができます。
お役に立てば幸いです。このことを追跡するのに数日かかった。
Michal Karzynskiのすばらしいガイド ' Django Nginx、Gunicorn、virtualenv、supervisorおよびPostgreSQLを使用してセットアップ 'を実行した後、同じ問題が発生しました。
そして、これが私がそれを解決した方法です。
スーパーバイザ(myapp/bin/gunicorn_start)を介してgunicornを起動するために使用されるbashスクリプトにこの変数がありました:
SOCKFILE={{ myapp absolute path }}/run/gunicorn.sock
これは、bashスクリプトを初めて実行するときに、「run」フォルダーとsockファイルroot権限を使用を作成します。そのため、私はSudoでrunフォルダーを削除してから、Sudo権限と出来上がりなしで再作成しました!これで、GunicornまたはSupervisorを再実行しても、迷惑なsockファイルが見つからないというエラーメッセージはもう表示されません。
TL; DR
私は同じ問題を抱えていて、Django_SETTINGS_MODULEをgunicornスクリプトの本番用設定に設定しており、wsgi設定がdevを使用していることがわかりました。
Django_SETTINGS_MODULEにdevを指定すると、すべてが機能しました。
ええと、私は1週間以上この問題に取り組み、ついにそれを理解することができました。 Digital Ocean からのリンクをたどってください。ただし、それらには重要な問題が含まれています
* 1 unix:/tmp/myproject.sockへのconnect()が失敗しました(2:そのようなファイルまたはディレクトリはありません)
etc。
これらの問題は基本的にNginxとGunicornの間の接続に関する権限の問題です。物事を簡単にするために、私は作成するすべてのfile/project/pythonプログラムに同じnginx権限を与えることをお勧めします。
すべての問題を解決するには、このアプローチに従います。最初のことは次のとおりです。
/etc/nginx/nginx.confファイルに移動します。サーバーモジュールに移動して追加します。
場所/ {proxy_paramsを含める; proxy_pass http <>:<> // unix:/home/nginx/myproject.sock; } REMOVE <>ここからDigitaloceanの記事をフォローしない