- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在/www/app.py 中写了一个简单的 Bottle 应用程序。
import bottle
app = bottle.Bottle()
@app.route('/')
def index():
return 'hello from bottle'
application=app
我已经在名为/etc/nginx/sites-enabled/foo 的文件中配置了我的 nginx 虚拟主机:
server {
listen 8080;
root /www;
index index.html index.htm;
server_name foo;
location / {
uwsgi_pass 127.0.0.1:9090;
}
}
我以这种方式启动 nginx 和 uwsgi:
service nginx restart
uwsgi --socket 127.0.0.1:9090 --wsgi-file app.py
但是当我尝试访问 http://foo/
时,我在网页中收到此错误:
Critical error while processing request: /
我在 uwsgi 输出中得到这个错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.3/dist-packages/bottle.py", line 954, in wsgi
out = self._cast(self._handle(environ))
File "/usr/local/lib/python3.3/dist-packages/bottle.py", line 845, in _handle
path = environ['bottle.raw_path'] = environ['PATH_INFO']
KeyError: 'PATH_INFO'
我怀疑可能是 nginx + uwsgi 环境没有为我的应用程序提供 environ['PATH_INFO']
值,所以我写了一个裸 WSGI 应用程序来确认它。我用这个替换了 app.py 中的代码:
def application(environ, start_response):
start_response('200 OK', [('Content-Type','text/html')])
print('----- begun environ -----')
for k, v in environ.items():
print('environ[{}] = {}'.format(k, v))
print('----- ended environ -----')
return [b'<p>Hello World</p>']
果然我在 uwsgi 输出中没有看到 PATH_INFO:
----- begun environ -----
environ[uwsgi.version] = b'2.0.2'
environ[HTTP_ACCEPT_ENCODING] = gzip, deflate
environ[HTTP_CACHE_CONTROL] = max-age=0
environ[wsgi.multithread] = False
environ[HTTP_HOST] = foo:8080
environ[wsgi.input] = <uwsgi._Input object at 0x7f990a7019d8>
environ[wsgi.url_scheme] = http
environ[HTTP_USER_AGENT] = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
environ[HTTP_ACCEPT_LANGUAGE] = en-US,en;q=0.5
environ[uwsgi.node] = b'nifty'
environ[wsgi.errors] = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
environ[wsgi.multiprocess] = False
environ[wsgi.run_once] = False
environ[wsgi.version] = (1, 0)
environ[HTTP_CONNECTION] = keep-alive
environ[HTTP_ACCEPT] = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
environ[wsgi.file_wrapper] = <built-in function uwsgi_sendfile>
----- ended environ -----
我应该怎么做才能让我的应用程序或 Bottle 应用程序获得 environ['PATH_INFO']
?
最佳答案
根据您使用的服务器平台,应该有 uwsgi_params
配置文件在您的 /etc/nginx
目录中设置这些参数。您可以像这样将它包含在您的 nginx 配置中:
server {
listen 8080;
root /www;
index index.html index.htm;
server_name foo;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
}
如果你没有这个文件,这是我本地 nginx 服务器的内容,它可能也适用于你:
menno@mimic:/etc/nginx$ nginx -v
nginx version: nginx/1.1.19
menno@mimic:/etc/nginx$ cat uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
关于python - 如何使 environ ['PATH_INFO' ] 在我的 nginx + uwsgi 环境中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266881/
uWSGI 主进程有什么用? 和/或我可以在哪里阅读更多相关信息? 我找到了零文档。 最佳答案 您可以找到有关大师的一些信息here和 here 一般来说,主文件负责优雅地重新加载您的应用程序服务器(
我有多个基于 Flask 的 web 应用程序在 docker 容器中运行(它们的进程需要与主机操作系统隔离)。为了运行这些应用程序,我在容器内使用了 uWSGI 服务器。传入的请求应该通过订阅服务器
我正在尝试使用 uwsgi 进行一些非常复杂的配置。从长远来看,我试图让自己的事情变得更容易,自然而然,这样做,我正在使事情变得尽可能困难。 无论如何,我正在寻找魔法变量的完整列表。我能在 Emper
我开始使用 uWSGI,我想知道它的工作人员是否是非阻塞/基于事件的(就像 nginx 一样)。 假设我已经像这样启动了 uWSGI: uwsgi --http :8000 --wsgi-file t
我们的应用程序是为 Python 2.7 编写的。它有一个配置为使用 Python 2.7 的 virtualenv。系统安装的 uWSGI 是用 Python 2.6 构建的。 It seems t
我在这个页面 http://uwsgi-docs.readthedocs.org/en/latest/StatsServer.html并使用 uwsgitop但我不知道如何解释输出。文档也没有透露太多
我看到这里发布了许多 uWSGI 配置,我在工作中遇到的现有应用程序的配置也有填充了 100 到 1000 值的 max-requests。 在一定数量的请求后回收进程的目的是什么?您是否试图避免内存
我正在使用 uWSGI 运行一个 webpy 网络服务器,有些请求花费的时间太长。设置 harakiri 模式后,我注意到请求被终止后会再次重试。 是否可以禁用此行为? 运行命令为: /usr/loc
uwsgi 中的“mule farm”是什么,它有什么用?有一些使用示例吗?我没有在文档或其他任何地方找到任何东西。 最佳答案 一群有名字的骡子 --farm chickens:1,2,3. --fa
在学习Python web开发时候,可能会遇到诸如uwsgi,wsgi等名词,下面通过梳理总结探究它们之间的关系。 CGI CGI,(Common Gateway Interface)通用网关接口,是
我已经使用 uWSGI 部署了一个 WSGI 应用程序,但是 I am not using NGINX .如何使用 uWSGI's internal routing将 http 请求重定向到 http
我正在使用命令在 uWsgi 服务器中测试应用程序, uwsgi --http :9090 --wsgi-file myapp.py --callable app --processes 4 --th
我们有一个工作的 uwsgi 服务器,带有一些 RPC 调用(注意:我们能够使用 uwsgi.rpc 与进程对话,因此它们端的设置很好)。我们发现我们有一些进程没有在 uwsgi 下运行,但我们想要与
我正在尝试为我的 Django 项目设置 uwsgi。它运行良好 ./manage.py runserver 0.0.0.0:9010 但是当我尝试 uwsgi --http :9010 --chd
我是 Linux 开发的新手。我对阅读的文档有点困惑。我的最终目标是托管一个简单的 python 支持的 Web 服务,该服务将检查传入的有效负载,并将其转发到其他服务器。这应该不到 30 行 pyt
我的 Django 应用程序倾向于使用 uwsgi+nginx,谁能分享启动我的 uwsgi 进程的最佳方法?有没有人有调整uwsgi的经验? 最佳答案 在 OSX 上启动 Unice 上的 Upst
从 ini 文件启动 uwsgi 时崩溃,堆栈跟踪如下: Traceback (most recent call last):
我用 Django 编写了一个服务器应用程序,并使用 Tastypie 为移动应用程序提供 API,并使用本地 MySQL 服务器为数据库提供服务。 在进程被杀死或结束之前,查询似乎被缓存了。如果我在
我正在开发一个基于 Python 的应用程序(HTTP -- REST 或 jsonrpc 接口(interface)),它将用于生产自动化测试环境。这将连接到运行所有测试脚本的 Java 客户端。即
我尝试在 nginx+uwsgi、os - debian (3.1.0-1-amd64 x86_64) 上为 django 建立网络服务器 nginx 1.1.8-1,uwsgi 0.9.8.3-1
我是一名优秀的程序员,十分优秀!