Flask中的500 HTTP异常,同时尝试通过app.open_resource()读取文件

时间:2019-02-26 16:38:48

标签: python flask

几乎是标题。我在本地计算机上尝试了该代码,这很好,但是在部署(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)

1 个答案:

答案 0 :(得分:2)

我认为这是一个文件路径问题,特别是以下这一行:reader = app.open_resource(os.path.join(app.root_path , 'static', 'data', 'modifications.json'))看起来不正确。

根据Flask的documentationapp.open_resource(...)从应用程序的资源文件夹中打开资源”。在您的代码中,您两次指定了应用程序的根路径

  1. 首先以app.open_resource(....)
  2. 然后再输入: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)

希望有帮助!