状況
1 台のコンピューターを複数の機器に接続しています。このコンピューターには、 uWSGIを使用してFalconアプリケーションをnginx
提供するサーバーがあります。このアプリケーションは、1 人のユーザーが計測器へのアクセスを要求すると、他のユーザーはアクセスできなくなると考えられています。これは、次のコード (私のコードを簡略化したもの) によって実現します。 WSGI
import json
import falcon
class Lab(object):
def __init__(self):
self.available_instruments = ["money_maker", "unicornifier"] # Not actual instruments
self.connected_instruments = []
def on_get(self, request, response):
response.status = falcon.HTTP_OK
response.content_type = "application/json"
response.body = json.dumps({
"connected": self.connected_instruments,
"available": self.available_instruments
})
def on_post(self, request, response):
json_body = json.loads(request.body)
instrument = json_body['connect']
if instrument in self.connected_instruments:
raise falcon.HTTPBadRequest('Busy')
elif instrument not in self.available_instruments:
raise falcon.HTTPBadRequest('No such instrument')
self.connected_instruments.append(instrument)
response.status = falcon.HTTP_OK
response.content_type = "application/json"
response.body = json.dumps({
"connected": self.connected_instruments,
"available": self.available_instruments
})
application = falcon.API()
l = Lab()
application.add_route('/', lab)
そしてリクエストボディ
{
"connect": "money_maker"
}
問題
楽器を「接続」すると、接続されていることがすぐにわかります。しかし、連続する GET 要求は期待される答えを与えません。私は得る
{
"connected": [],
"available": ["money_maker", "unicornifier"]
}
しかし、テスト目的で、ローカルの uWSGI インスタンスで上記のコードを実行すると、これは起こりません。私が認識していない nginx-uWSGI の相互作用はありますか? いくらでも助けていただければ幸いです。
完全を期すために、ここではuWSGI によって呼び出されるnginx.conf
およびファイルに従ってください。api.ini
nginx/サイト利用可能/api
#nginx config file for uWSGI requests routing
server {
listen 80;
server_name example.com;
location /api {
include uwsgi_params;
uwsgi_pass unix:///tmp/api.sock;
}
}
api.ini
[uwsgi]
master = true
processes = 5
socket = /tmp/%n.sock
chmod-socket = 666
uid = apidev
gid = www-data
chdir = %d../%n
pythonpath = %d../%n
module = %n
vacuum = true