RPi3 Alpine Linux下uWSGI运行Flask遇TemplateNotFound问题求助
解决uWSGI运行Flask时找不到模板的问题
这个问题很常见,核心原因是Flask识别模板目录的逻辑在uWSGI环境下和Flask CLI环境下有差异,下面给你几个靠谱的解决方案:
1. 强制指定uWSGI的工作目录
Flask CLI运行时会自动把当前目录作为应用根目录,但uWSGI启动时可能没在你的应用目录下(或者即使你在,也需要显式声明)。你可以在uWSGI命令里加上--chdir参数,指定到myapp.py所在的目录:
uwsgi --wsgi-file myapp.py --callable app --master true --http-socket=0.0.0.0:2340 --chdir /绝对路径/到你的应用目录
比如如果你的应用在/home/pi/my-flask-app下,就把--chdir的值设为这个路径。如果当前终端已经在应用目录里,也可以用--chdir .,但绝对路径更稳妥,避免后续切换目录运行出问题。
2. 在Flask代码里显式指定模板路径
如果不想每次启动uWSGI都加--chdir,可以直接在myapp.py里硬编码模板目录的绝对路径,这样不管运行环境的工作目录是什么,Flask都能精准找到模板:
import os from flask import Flask # 获取当前脚本所在的绝对目录 app_root = os.path.dirname(os.path.abspath(__file__)) # 初始化Flask时指定模板文件夹的绝对路径 app = Flask(__name__, template_folder=os.path.join(app_root, 'templates')) # 你的路由代码... @app.route('/') def index(): return render_template('index.html')
3. 检查模板目录的权限
Alpine Linux的权限管控比较严格,要确保uWSGI运行的用户(比如默认的www-data,或者你用的pi用户)有读取templates目录和index.html文件的权限。可以用以下命令查看:
# 查看templates目录权限 ls -ld templates/ # 查看index.html文件权限 ls -l templates/index.html
如果权限不足,用chmod调整:
chmod -R 755 templates/
这样能保证任何用户都有读取模板的权限。
为什么flask run没问题?
因为flask run是Flask官方的CLI工具,它会自动检测当前工作目录作为应用根目录,进而找到templates文件夹;而uWSGI是直接加载WSGI文件,它不会自动推断应用根目录,所以需要我们手动指定工作目录或者在代码里明确模板路径。
内容的提问来源于stack exchange,提问作者sagar_acharya
相关产品推荐
相关产品推荐

