Python 使用mongoengine部署Flask应用程序的WSGI时,“您尚未定义默认连接”

Python 使用mongoengine部署Flask应用程序的WSGI时,“您尚未定义默认连接”,python,flask,amazon-elastic-beanstalk,mod-wsgi,mongoengine,Python,Flask,Amazon Elastic Beanstalk,Mod Wsgi,Mongoengine,我被第一次在Elastic Beanstalk上部署flask应用程序所困扰。它无法建立到mongodb的连接,错误为mongoengine.connection.MongoEngineConnectionError:您尚未定义默认连接 细节 应用程序使用烧瓶,连接API配置,mongoengine作为mongodb胶水 connexion==1.1.15 Flask==1.0.1 mongoengine==0.15.0 pymongo==3.6.1 PyJWT==1.6.1 这里显示的示例部

我被第一次在Elastic Beanstalk上部署flask应用程序所困扰。它无法建立到mongodb的连接,错误为mongoengine.connection.MongoEngineConnectionError:您尚未定义默认连接

细节

应用程序使用烧瓶,连接API配置,mongoengine作为mongodb胶水

connexion==1.1.15
Flask==1.0.1
mongoengine==0.15.0
pymongo==3.6.1
PyJWT==1.6.1
这里显示的示例部署在Python3.4上,但应用程序运行在Python3.6上,本地运行也运行在Elastic Beanstalk上,存在相同的问题

同样的应用程序在本地环境或EC2 Amazon Linux AMI上可以很好地工作,当它作为带有ApacheProxyPass配置的python应用程序运行时

以下是相关代码:

__初始值

application.py

目录结构

Base Dir(Elastic Benstalk Root dir)
  -- application.py
  -- api_server
  -----__init__.py
  -----config
  --------app_config.ymal 
wsgi.conf由服务器上的ElasticBeanstalk实用程序创建的apache mod_wsgi config:

LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On

<VirtualHost *:80>

Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static/>
Order allow,deny
Allow from all
</Directory>


WSGIScriptAlias / /opt/python/current/app/application.py


<Directory /opt/python/current/app/>
  Require all granted
</Directory>

WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
  python-home=/opt/python/run/venv/ \
  python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.4/site-packages:/opt/python/run/venv/lib/python3.4/site-packages user=wsgi group=wsgi \
  home=/opt/python/current/app
WSGIProcessGroup wsgi
</VirtualHost>

LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
需要帮助找出哪里出了问题。 1.WSGI配置中缺少什么吗? 2.尝试使用flask mongoengine,app.config[MONGODB_SETTING]获得相同的结果,是否有其他方法可以设置DB设置? 3.mongo引擎/pymongo如何读取默认设置 4.在我编写启动代码的过程中是否还有其他问题导致了这个问题


请提供您能提供的任何信息。到目前为止,已尝试查找所有可能的信息,但无法纠正此问题。

我认为您的问题是由您构建输入脚本的方式造成的。定义了下面的if语句意味着您必须直接运行_init__uu.py来执行main函数

但是,在application.py中,您仅导入此模块

from api_server import app as application
因此,没有调用负责连接数据库的线路。
查看此答案以了解此行为。

此链接应该会帮助您基本上是针对Django的,尽管如此,我还是尝试了,但没有取得多大成功。谢谢,您对应用程序入口点结构的看法是正确的,这是问题所在。主要问题是不是在方法中初始化了配置,而是在加载类init.py时初始化了配置。我将其移动到一个单独的方法中,以便在main中调用。
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On

<VirtualHost *:80>

Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static/>
Order allow,deny
Allow from all
</Directory>


WSGIScriptAlias / /opt/python/current/app/application.py


<Directory /opt/python/current/app/>
  Require all granted
</Directory>

WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
  python-home=/opt/python/run/venv/ \
  python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.4/site-packages:/opt/python/run/venv/lib/python3.4/site-packages user=wsgi group=wsgi \
  home=/opt/python/current/app
WSGIProcessGroup wsgi
</VirtualHost>

LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[Sun May 27 09:37:30.839005 2018] [:error] [pid 16181] Traceback (most recent call last):
[Sun May 27 09:37:30.839064 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/flask/app.py", line 2292, in wsgi_app
[Sun May 27 09:37:30.839125 2018] [:error] [pid 16181]     response = self.full_dispatch_request()
[Sun May 27 09:37:30.839174 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/flask/app.py", line 1815, in full_dispatch_request
[Sun May 27 09:37:30.839227 2018] [:error] [pid 16181]     rv = self.handle_user_exception(e)
[Sun May 27 09:37:30.839276 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/flask/app.py", line 1718, in handle_user_exception
[Sun May 27 09:37:30.839325 2018] [:error] [pid 16181]     reraise(exc_type, exc_value, tb)
[Sun May 27 09:37:30.839378 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/flask/_compat.py", line 35, in reraise
[Sun May 27 09:37:30.839426 2018] [:error] [pid 16181]     raise value
[Sun May 27 09:37:30.839472 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/flask/app.py", line 1813, in full_dispatch_request
[Sun May 27 09:37:30.839513 2018] [:error] [pid 16181]     rv = self.dispatch_request()
[Sun May 27 09:37:30.839544 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/flask/app.py", line 1799, in dispatch_request
[Sun May 27 09:37:30.839574 2018] [:error] [pid 16181]     return self.view_functions[rule.endpoint](**req.view_args)
[Sun May 27 09:37:30.839604 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/connexion/decorators/decorator.py", line 66, in wrapper
[Sun May 27 09:37:30.839633 2018] [:error] [pid 16181]     response = function(request)
[Sun May 27 09:37:30.839661 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/connexion/decorators/validation.py", line 122, in wrapper
[Sun May 27 09:37:30.839708 2018] [:error] [pid 16181]     response = function(request)
[Sun May 27 09:37:30.839739 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/connexion/decorators/validation.py", line 293, in wrapper
[Sun May 27 09:37:30.839769 2018] [:error] [pid 16181]     return function(request)
[Sun May 27 09:37:30.839798 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/connexion/decorators/decorator.py", line 42, in wrapper
[Sun May 27 09:37:30.839827 2018] [:error] [pid 16181]     response = function(request)
[Sun May 27 09:37:30.839856 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/connexion/decorators/parameter.py", line 218, in wrapper
[Sun May 27 09:37:30.839885 2018] [:error] [pid 16181]     return function(**kwargs)
[Sun May 27 09:37:30.839913 2018] [:error] [pid 16181]   File "/opt/python/current/app/api_server/auth/auth_service.py", line 21, in wrapper
[Sun May 27 09:37:30.839942 2018] [:error] [pid 16181]     queryObj= CampaignOwner.objects(campaignOwnerId=g.campaign_owner_id)
[Sun May 27 09:37:30.839971 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/mongoengine/queryset/manager.py", line 37, in __get__
[Sun May 27 09:37:30.840000 2018] [:error] [pid 16181]     queryset = queryset_class(owner, owner._get_collection())
[Sun May 27 09:37:30.840029 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/mongoengine/document.py", line 191, in _get_collection
[Sun May 27 09:37:30.840058 2018] [:error] [pid 16181]     db = cls._get_db()
[Sun May 27 09:37:30.840086 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/mongoengine/document.py", line 180, in _get_db
[Sun May 27 09:37:30.840115 2018] [:error] [pid 16181]     return get_db(cls._meta.get('db_alias', DEFAULT_CONNECTION_NAME))
[Sun May 27 09:37:30.840144 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/mongoengine/connection.py", line 226, in get_db
[Sun May 27 09:37:30.840173 2018] [:error] [pid 16181]     conn = get_connection(alias)
[Sun May 27 09:37:30.840201 2018] [:error] [pid 16181]   File "/opt/python/run/venv/local/lib/python3.4/site-packages/mongoengine/connection.py", line 146, in get_connection
[Sun May 27 09:37:30.840230 2018] [:error] [pid 16181]     raise MongoEngineConnectionError(msg)
[Sun May 27 09:37:30.840261 2018] [:error] [pid 16181] mongoengine.connection.MongoEngineConnectionError: You have not defined a default connection
def main():

    db = me.connect(alias="default", host="mongodb+srv://*[DB URL]*")

if __name__ == '__main__':
    main()
from api_server import app as application