flask-socketio 不适用于安装了 eventlet 的 aws
flask-socketio does not work on aws with eventlet installed
我目前遇到一个问题 运行 使用带有 eventlet 的 flask-socketio 的 Flask 应用程序。当我在没有 eventlet 的情况下推送到 AWS 时,我的应用程序可以完美运行。这很好,但是我希望我的应用程序可以投入生产,并且 运行 没有 eventlet 的 flask-socketio 既缓慢又乏味。我所做的是,我将我的应用程序分解为一个具有最低要求和代码的较小的烧瓶应用程序,以便测试到底出了什么问题(下面提供了此应用程序的 link)。如果你去掉 eventlet 和它在 requirements.txt 中的依赖项,这个较小的应用程序可以在 aws 上工作,如果你把它们留在那儿,它就会中断。经过大量的调试和测试,我仍然无法弄清楚错误的来源。任何帮助将不胜感激。
在 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
编辑:此设置适用于本地主机。它只是在 AWS 上不起作用。
这个错误:
[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 文档以获取支持的部署配置列表。
抱歉,我上传了使用旧安装工具创建的包,它不支持 install_requirements
中的语法 enum34;python_version<"3.4"
。
请尝试更新 pip install -U eventlet
,刚刚发布的 0.22.1 应该可以解决这个问题。
Github 上的相关问题(如果 0.22.1 未修复,请订阅新闻):https://github.com/eventlet/eventlet/issues/463
我目前遇到一个问题 运行 使用带有 eventlet 的 flask-socketio 的 Flask 应用程序。当我在没有 eventlet 的情况下推送到 AWS 时,我的应用程序可以完美运行。这很好,但是我希望我的应用程序可以投入生产,并且 运行 没有 eventlet 的 flask-socketio 既缓慢又乏味。我所做的是,我将我的应用程序分解为一个具有最低要求和代码的较小的烧瓶应用程序,以便测试到底出了什么问题(下面提供了此应用程序的 link)。如果你去掉 eventlet 和它在 requirements.txt 中的依赖项,这个较小的应用程序可以在 aws 上工作,如果你把它们留在那儿,它就会中断。经过大量的调试和测试,我仍然无法弄清楚错误的来源。任何帮助将不胜感激。
在 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
编辑:此设置适用于本地主机。它只是在 AWS 上不起作用。
这个错误:
[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 文档以获取支持的部署配置列表。
抱歉,我上传了使用旧安装工具创建的包,它不支持 install_requirements
中的语法 enum34;python_version<"3.4"
。
请尝试更新 pip install -U eventlet
,刚刚发布的 0.22.1 应该可以解决这个问题。
Github 上的相关问题(如果 0.22.1 未修复,请订阅新闻):https://github.com/eventlet/eventlet/issues/463