【发布时间】:2016-05-08 16:24:54
【问题描述】:
总结:我有一个网站,可以通过 Flask 和 Elasticsearch 进行搜索。当我直接运行烧瓶时,这在我的本地机器和服务器(Vultr 液滴)上完美运行。但是,当我通过 Nginx 和 uWSGI 运行网站时,它突然变得不可靠,返回了一些结果,但没有返回其他结果。我不知道如何解决这个问题,可以使用一些建议或指针!
我会尽量提供有关我的设置的信息:
弹性搜索
服务器运行状况:
{
"cluster_name" : "elasticsearch",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 1,
"active_shards" : 1,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
这是带有info from my index的pastebin
Javascript、AJAX 和 Flask
当用户开始输入时,jQuery 自动完成会发出一个 AJAX 请求,该请求会被转发到 elasticsearch(通过 Flask),在那里运行查询。结果返回到 javascript 并添加到 HTML。
我怀疑这里有问题,因为在我使用 Nginx 之前它可以正常工作,但不管这里是信息:
- This is the javascript that uses jQuery autocomplete and AJAX with GET。
- 这会通过 AJAX 调用在 views.py class 中调用 get_search_results()
- 最后 get_search_results() 通过search_database() function 获取自动完成结果
正常工作
当我通过调试脚本运行烧瓶应用程序时,它运行良好:
#!flask/bin/python
from app import application
application.run(host='0.0.0.0', debug=True)
每当我开始键入时,自动完成功能都会立即运行并返回正确的结果。
问题
但是,当我通过 Nginx 将网站作为服务运行时,uWSGI 搜索结果有时有效,但有时无效。一些名字被返回,但大多数没有。部分字符串几乎从不返回。我通过以下方式设置服务器(我基本上遵循this tutorial):
这会运行 flask 应用程序:
#!flask/bin/python
from app import application
if __name__ == "__main__":
application.run()
该模块被以下创建套接字的uWSGI .ini 调用:
[uwsgi]
module = run_wsgi
master = true
processes = 5
socket = transfer_website.sock
chmod-socket = 660
vacuum = true
die-on-term = true
uWSGI 由 upstart 脚本使用此 .ini 启动:
description "uWSGI server instance configured to serve Transfer Website"
start on runlevel [2345]
stop on runlevel [!2345]
setuid admin
setgid www-data
env PATH=/home/admin/transfer_website/transfer-virt-env/bin
chdir /home/admin/transfer_website
exec uwsgi --ini transfer_website.ini
最后,服务器通过 Nginx 接受请求,将请求转发到网站套接字。该文件位于 /etc/nginx/sites 中(我已经编辑了网站的 IP 地址):
server {
listen 80;
server_name /*my.server.ip.address*/;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/admin/transfer_website/transfer_website.sock;
}
}
我检查了 elasticsearch 日志,似乎根本没有与此问题相关的任何内容。我的猜测是问题出在转发和 AJAX 调用的某个地方,但我不知道如何调试。
抱歉,如果这篇文章含糊不清,或者我留下了我们的重要信息,我很乐意提供。
【问题讨论】:
标签: ajax nginx elasticsearch flask uwsgi