小编Dr.*_*ein的帖子

Flask、FlaskSocketIO - RuntimeError:无法从 WSGI 环境获取套接字

当我尝试在应用程序中使用使用 websockets 的功能时,我在控制台中收到此错误:

File "/Users/user/venv/lib/python3.7/site-packages/simple_websocket/ws.py", line 138, in __init__
    raise RuntimeError('Cannot obtain socket from WSGI environment.')
RuntimeError: Cannot obtain socket from WSGI environment.
Run Code Online (Sandbox Code Playgroud)

我还在浏览器控制台中收到此错误: WebSocket connection to 'ws://localhost:5000/socket.io/?EIO=4&transport=websocket&sid=40NYzDgGYStMR0CEAAAJ' failed:

我尝试使用 gevent、gevent-websocket 和 eventlet,但这会产生其他问题,并且我不确定是否需要在该用例中使用 gevent 或 eventlet。

这是其余的相关代码:

__初始化__.py

from flask_socketio import SocketIO
...

socketio = SocketIO()

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)

    socketio.init_app(app, cors_allowed_origins='*')

    ...

    return app
Run Code Online (Sandbox Code Playgroud)

应用程序.py

from app import create_app, socketio

app = create_app()

if __name__ == '__main__':
    socketio.run(app)
Run Code Online (Sandbox Code Playgroud)

routes.py 这只接受 POST 请求,因为我从 Celery 任务将数据发送到此路由

from …
Run Code Online (Sandbox Code Playgroud)

python websocket flask flask-socketio

9
推荐指数
1
解决办法
3392
查看次数

Flask Migrate (Alembic) 不创建迁移

我有一个相当大的 Flask 应用程序,创建新数据表的典型工作流程如下:

我在 models.py 中创建一个类,如下所示:

class ExampleModel(db.Model):
    __tablename__ = 'example_table'

    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(100))
Run Code Online (Sandbox Code Playgroud)

然后我跑了flask db migrate,然后flask db upgrade。这些命令之后,表已创建,我可以正常插入数据

item = ExampleModel(text='something')
db.session.add(item)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)

到目前为止,我在使用上述工作流程时没有遇到任何问题,甚至在我开始遇到问题之前也是如此。我添加了一个表,然后向其中添加了一些列,基本上只是遇到了可为空值之类的问题(用户错误)。除了删除一些模型类、迁移脚本以及手动删除 psql 中的一个表(我使用的是 Postgres)之外,我没有做太多事情。

现在,我无法从上面执行测试用例(ExampleModel)。当我尝试这个简单的示例时,迁移目录中没有创建迁移脚本

输出来自flask db migrate

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
Run Code Online (Sandbox Code Playgroud)

输出来自flask db upgrade

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  • 从 master 开始变基,本质上是从头开始
  • 使用上面的测试模型
  • 删除migrations目录并创建一个新目录

我的配置和初始化文件应该没问题——自从上次工作以来它们没有改变。我被这个难住了

python flask flask-sqlalchemy alembic flask-migrate

3
推荐指数
1
解决办法
3463
查看次数