几乎是标题。我在本地计算机上尝试了该代码,这很好,但是在部署(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)
答案 0 :(得分:2)
我认为这是一个文件路径问题,特别是以下这一行: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)
希望有帮助!