环境: nginx, uwsgi(flask), mongodb 各运行在独立的docker容器中。
问题: 本地测试一切正常,部署到服务器(腾讯云)之后,无法连接到mongodb数据库。
uwsgi日志如下:
[pid: 8|app: 0|req: 2/3] 117.27.149.14 () {42 vars in 610 bytes} [Mon Sep 12 03:37:26 2016] HEAD / => generated 0 bytes in 30019 msecs (HTTP/1.1 500) 2 headers in 0 bytes (0 switches on core 1) [2016-09-12 03:37:56,255] ERROR in app: Exception on / [HEAD] Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1988, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1641, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1544, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise raise value File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1639, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1625, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/usr/local/lib/python3.5/dist-packages/flask/views.py", line 84, in view return self.dispatch_request(*args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/flask/views.py", line 149, in dispatch_request return meth(*args, **kwargs) File "./app/main/views.py", line 17, in get list_categories = get_categories(Post.objects) File "/usr/local/lib/python3.5/dist-packages/mongoengine/queryset/manager.py", line 37, in __get__ queryset = queryset_class(owner, owner._get_collection()) File "/usr/local/lib/python3.5/dist-packages/mongoengine/document.py", line 176, in _get_collection db = cls._get_db() File "/usr/local/lib/python3.5/dist-packages/mongoengine/document.py", line 169, in _get_db return get_db(cls._meta.get("db_alias", DEFAULT_CONNECTION_NAME)) File "/usr/local/lib/python3.5/dist-packages/mongoengine/connection.py", line 173, in get_db source=conn_settings['authentication_source']) File "/usr/local/lib/python3.5/dist-packages/pymongo/database.py", line 1018, in authenticate connect=True) File "/usr/local/lib/python3.5/dist-packages/pymongo/mongo_client.py", line 439, in _cache_credentials writable_preferred_server_selector) File "/usr/local/lib/python3.5/dist-packages/pymongo/topology.py", line 210, in select_server address)) File "/usr/local/lib/python3.5/dist-packages/pymongo/topology.py", line 186, in select_servers self._error_message(selector)) pymongo.errors.ServerSelectionTimeoutError: mongodb_1:27017: [Errno 111] Connection refused Mon Sep 12 03:37:56 2016 - SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) !!! Mon Sep 12 03:37:56 2016 - uwsgi_response_write_headers_do(): Broken pipe [core/writer.c line 238] during HEAD / (117.34.28.13) [pid: 10|app: 0|req: 1/4] 117.34.28.13 () {42 vars in 609 bytes} [Mon Sep 12 03:37:26 2016] HEAD / => generated 0 bytes in 30061 msecs (HTTP/1.1 500) 2 headers in 0 bytes (0 switches on core 0)
但是,我进入uwsgi容器,在代码目录下执行 python3 manage.py deploy
完全没问题(这个命令会往数据库里插入一条数据),所以貌似是这样的:flask可以和mongodb正常通信,但是uwsgi不行。
简直蛋疼得紧!
uwsgi配置如下:
[uwsgi] # 提供http和socket两种通信方式 http = 0.0.0.0:8080 socket = /tmp/%n.sock # socket 文件权限 chmod-socket = 666 # 网站主目录 chdir = /var/www/chriscafe.me # 程序启动文件 wsgi-file = manage.py # 程序内启动 application 的变量名 callable = app # 日志文件路径 logto = /var/log/uwsgi/%n.log # 处理器数 processes = 4 # 线程数 threads = 2 #状态检测地址(本地地址,只有管理员才可以查看) stats = 127.0.0.1:9191
你这个问题解决了吗,我也遇到这个问题,直接运行代码测试可以访问数据库,换到nginx+uwsgi就刚刚启动的时候可以,一会就不行了
应用和数据库是在同一台机器,还是不同机器,如果是不同机器,检查一下防火墙端口是否开放