flask-socketio在安装了eventlet的aws上不起作用

时间:2018-02-16 19:16:44

标签: python amazon-web-services flask flask-socketio eventlet

我目前在使用带有eventlet的flask-socketio运行Flask应用程序时遇到问题。当我没有eventlet推送到AWS时,我的应用程序完美运行。这很棒,但是我希望我的应用程序能够生产就绪,并且运行flask-socketio而没有eventlet是缓慢而乏味的。我所做的是我将我的应用程序分解为一个较小的烧瓶应用程序,其中包含最低要求和代码,以便测试究竟是什么问题(下面提供了此应用程序的链接)。这个较小的应用程序可以在aws上运行,如果你在requirements.txt中删除了eventlet及它的依赖项,如果你把它们留在那里就会中断。经过大量的调试和测试后,我仍然无法弄清楚错误来源的来源。任何帮助将不胜感激。

在AWS上,我收到以下通用服务器错误:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

请与root @ localhost上的服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。

服务器错误日志中可能会提供有关此错误的更多信息。

在AWS eb日志中,我看到以下内容:

[Fri Feb 16 17:45:47.269584 2018] [:error] [pid 4233]     import re
[Fri Feb 16 17:45:47.269592 2018] [:error] [pid 4233]   File "/opt/python/run/venv/lib64/python3.6/re.py", line 142, in <module>
[Fri Feb 16 17:45:47.269750 2018] [:error] [pid 4233]     class RegexFlag(enum.IntFlag):
[Fri Feb 16 17:45:47.269762 2018] [:error] [pid 4233] AttributeError: module 'enum' has no attribute 'IntFlag'
[Fri Feb 16 17:45:48.274188 2018] [:error] [pid 4233] [remote 127.0.0.1:148] mod_wsgi (pid=4233): Target WSGI script '/opt/python/current/app/application.py' cannot be loaded as Python module.
[Fri Feb 16 17:45:48.274233 2018] [:error] [pid 4233] [remote 127.0.0.1:148] mod_wsgi (pid=4233): Exception occurred processing WSGI script '/opt/python/current/app/application.py'.

这是包含我的项目代码的github仓库:

https://github.com/Freddie-Pike/Flask-SocketIO-AWS

编辑:此设置适用于localhost。它只适用于AWS。

2 个答案:

答案 0 :(得分:1)

此错误:

[Fri Feb 16 17:45:47.269584 2018] [:error] [pid 4233]     import re
[Fri Feb 16 17:45:47.269592 2018] [:error] [pid 4233]   File "/opt/python/run/venv/lib64/python3.6/re.py", line 142, in <module>
[Fri Feb 16 17:45:47.269750 2018] [:error] [pid 4233]     class RegexFlag(enum.IntFlag):
[Fri Feb 16 17:45:47.269762 2018] [:error] [pid 4233] AttributeError: module 'enum' has no attribute 'IntFlag'

很可能与SocketIO无关。我的猜测是你的应用程序有一个名为enum的模块或包,它隐藏了Python 3.6中的enum包。删除或重命名您的enum,以便Python可以看到自己的enum,错误就会消失。

除此之外,正如Graham所说,你不能将apache和mod_wsgi与websockets一起使用。您可以参考Flask-SocketIO文档以获取支持的部署配置列表。

答案 1 :(得分:1)

很抱歉,我上传了使用旧版setuptools创建的软件包,该软件包在enum34;python_version<"3.4"中不遵循此语法install_requirements

请尝试更新pip install -U eventlet,刚刚发布的0.22.1应解决此问题。

关于Github的相关问题(订阅新闻,如果0.22.1没有修复它):https://github.com/eventlet/eventlet/issues/463