自建Flet Web应用卡在‘请等待应用启动’状态的原因排查
Flet Web应用卡在启动状态的排查与解决
问题原因分析
name参数配置错误:代码中DEFAULT_FLET_PATH设置为'http:/ip/',但Flet的ft.app()方法的name参数仅用于指定Web服务的路径前缀(如空字符串表示根路径,'myapp'表示子路径),不能是包含协议或IP的完整URL,该错误会导致前端无法正确建立与后端的连接。- 未允许外部访问绑定:默认情况下Flet服务仅绑定
127.0.0.1,远程部署时外部客户端无法访问。 - 端口未开放:服务器防火墙/安全组未开放8502端口,导致前端无法通过WebSocket(Flet依赖的通信方式)连接后端。
解决方法
- 修正
name参数配置:将DEFAULT_FLET_PATH改为合法的路径前缀,比如空字符串(根路径部署):DEFAULT_FLET_PATH = '' # 根路径部署,或设为'myapp'这类子路径 - 添加外部访问绑定:在
ft.app()中指定host='0.0.0.0',允许任意IP访问服务:ft.app(name=flet_path, target=main, view=None, port=flet_port, host='0.0.0.0') - 开放服务端口:在服务器的防火墙、安全组规则中,添加允许8502端口的入站访问规则。
- 验证WebSocket连接:打开浏览器开发者工具(F12),切换到Network标签,筛选WebSocket请求,确认是否能成功建立连接,排查网络层面问题。
修改后的完整代码
import flet as ft import os # 根路径部署设为空字符串,子路径部署可改为'myapp'等 DEFAULT_FLET_PATH = '' DEFAULT_FLET_PORT = 8502 def main(page: ft.Page): page.title = "You Enjoy Mychatbot" page.add(ft.Text("Reba put a stopper in the bottom of the tub")) if __name__ == "__main__": flet_path = os.getenv("FLET_PATH", DEFAULT_FLET_PATH) flet_port = int(os.getenv("FLET_PORT", DEFAULT_FLET_PORT)) ft.app(name=flet_path, target=main, view=None, port=flet_port, host='0.0.0.0')
内容的提问来源于stack exchange,提问作者Adib Valli
相关产品推荐
相关产品推荐

