和标题差不多。我在本地计算机上尝试了代码,效果很好,但是在部署(Phusion Passenger)时,这似乎不起作用。
from flask import Flask
import flask
import json
import os
app = Flask(__name__)
@app.route('/mods')
def mods_index():
try:
reader = app.open_resource(os.path.join(app.root_path , 'static', 'data', 'modifications.json'))
modifications = json.load(reader)
reader.close()
except:
flask.abort(500)
return flask.render_template('mods_index.html', mods=modifications)
最佳答案
我认为这是一个文件路径问题,特别是这一行:reader = app.open_resource(os.path.join(app.root_path , 'static', 'data', 'modifications.json'))
看起来不正确。
根据 Flask 的 documentation :app.open_resource(...)
“从应用程序的资源文件夹中打开资源”。在您的代码中,您指定应用程序的根路径两次:
- 首先是
app.open_resource(....)
- 然后再次输入:
app.root_path
所以您的服务器正在尝试打开您的 modifications.json
文件来自:<app_root_path>/<app_root_path/static/data/modifications.json
与 <app_root_path>/static/data/modifications.json
相反哪里<app_root_path>
是您的应用程序的根目录。所以解决方案是去掉其中一个 <app_root>
提到。也许您可以尝试以下方法:
reader_path = os.path.join('static', 'data', 'modifications.json'))
with app.open_resource(reader_path) as f:
contents = f.read()
# do_something_with(contents)
希望有帮助!
关于python - Flask 中尝试通过 app.open_resource() 读取文件时出现 500 HTTP 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54890195/