かなり大きな問題があります。
私はuwsgiが初めてで、この問題をデバッグする方法について100%確信が持てませんが、現在の場所に関する情報を提供します。
uwsgi reload
を実行すると
Sudo service uwsgi reload
このエラーが表示されます
* Reloading app server(s) uwsgi
...fail!
それでおしまい。他に何も得られません。
私は何時間もスタックオーバーフローを探していましたが、この問題を正確に概説するものは何も見つかりませんでした。人々の.iniファイルに多くのことを見つけましたが、uwsgi --ini MYINI.ini
を介して手動でサイトを実行してからアクセスするため、それが私の問題ではないことを知っていますそれは完全に正常に動作し、問題はuWSGIにあり、この解決策を見つける方法がわかりません。私はドキュメントを調べましたが、この特定のエラーについては何も見つかりません。
これが誰かに興味があるなら、私のuwsgi-server.confファイル
description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
env LOGTO=/var/log/uwsgi.log
env BINPATH=/usr/local/bin/uwsgi
exec $BINPATH --emperor /etc/uwsgi/vassals --logto $LOGTO
どんな洞察もいただければ幸いです。私は何かを見逃しているように感じますが、uWSGIがあまりにも新しいので、それが何であるかを推測することさえできません。
私の設定についてさらに情報が必要な場合は、お問い合わせください。
Uwsgiを使用してDjango ubuntuサーバー上のサイトを作成するのは非常に簡単ですが、間違いを犯す前に知っておくべきことがまだあります。
Ubuntuにuwsgiをインストールするには、apt-getまたはpipの2つの方法があります。
apt-getを使用する場合、pythonプラグインをインストールする必要があります。
Sudo apt-get install uwsgi-plugin-python
Sudo apt-get install uwsgi
そして、あなたのサイトのuwsgi iniファイルで、これを追加する必要があります:
plugins=python
pipを使用する場合、最初にpython-devをインストールする必要があります。
Sudo apt-get install python-dev
Sudo pip install uwsgi
そして、plugins=python
in iniファイルはもう必要ありません。
Pipの前にSudoを見る?はい、uwsgiはグローバルシステムにインストールする必要があります。ここでSudoを逃した場合、virtualenvにインストールできます。意味がなく、実行に問題があるかもしれません。
デーモン化とは、システムのブート時およびバックグラウンドでuwsgiを実行することを意味します。 uwsgiのインストール方法に応じて、2つの方法があります。
Ubuntuでapt-get install uwsgi
すると、サービスとして自動的にインストールされます。魔法はこのファイルにあります:
/etc/init.d/uwsgi
/etc/init.d
のファイルはsysvinitによってロードされます。次に、次のようにuwsgiサービスを管理できます。
Sudo /etc/init.d/uwsgi start|stop|restart|reload
または:
Sudo service uwsgi start|stop|restart|reload
serviceコマンドは、sysvinitによって管理されるサービスを見つけることができます
Uwsgiがpipによってインストールされている場合、実行ファイルは/usr/local/bin/uwsgi
にしかありません。自分でデーモン化する必要があります。
/etc/init.d/
のファイルの一部を開くと、悲しく感じるかもしれません。単にuwsgiをサービスとして登録したいのですが、なぜ他のスクリプトと似た長いスクリプトを書く必要があるのですか?意味がありません。
幸いなことに、sysvinitに代わるUpstartを使用すると、非常に簡単です。 /etc/init/
の代わりに/etc/init.d/
を使用します。
次の内容のファイル/etc/init/uwsgi.conf
を作成するだけです:
description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals/ --logto /var/log/uwsgi.log
その後、次のようにuwsgiプロセスを管理できます。
Sudo initctl start|stop|restart|reload| uwsgi
または、まだこれ:
Sudo service uwsgi start|stop|restart|reload
はい、ご覧のとおり、serviceコマンドはスマートで、sysvinitとUpstartの両方から同じコマンドでサービスを管理できます。
また、/etc/init.d/uwsgi
と/etc/init/uwsgi.conf
の両方がある場合、次のように言うと:
Sudo service uwsgi restart
Upstartファイル/etc/init/uwsgi.conf
を再起動します。 sysvinitの1つは無視されるか、類似したものになります。
みんなにpipとUpstartの方法を使用することをお勧めします。
その場合、uwsgiの皇帝モードを使用しています。これは非常に便利で強力です。
これで、次のように/etc/uwsgi/vassals/
にiniファイルを作成できます。
[uwsgi]
virtualenv=/path/to/venv/
chdir=/path/to/proj/root
module=wsgi:application
env=Django_SETTINGS_MODULE=settings
master=True
vacuum=True
socket=/tmp/%n.sock
pidfile=/tmp/%n.pid
daemonize=/var/log/uwsgi/%n.log
%n
はファイル名を意味します。たとえば、私のプロジェクト名は 'example'で、example.ini
ファイルを作成します。 %n
は「例」を意味します。実際の名前に置き換える必要はありません。 uwsgiがこれを行います。
次に、uwsgiを再起動またはリロードします。
Sudo service uwsgi restart
ソケットファイルを確認します。
ll /tmp/*.sock
そこにあれば、今すぐuwsgiで成功しています:)
ドメインexample.comを例にとります。
server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
charset utf-8;
server_name example.com;
location /static/ {
alias /path/to/static/;
}
location /media/ {
alias /path/to/media/;
}
location / {
try_files $uri @Django;
}
location @Django {
uwsgi_pass unix:///tmp/example.sock;
include uwsgi_params;
}
}
nginxを再起動すると、サイトが表示されます!
Uwsgiの設定ファイルは/etc/init/uwsgi-server.conf
ですので、使用する名前はuwsgi
ではなくuwsgi-server
です。
次のようにuwsgi emperorインスタンスを再起動する必要があります。
Sudo initctl restart uwsgi-server
または:
Sudo service uwsgi-server restart
それで全部です!