首先我看到this question。我的问题是我在pythonanywhere上运行了一个烧瓶应用程序,它从服务器上同一目录中的json文件中读取信息,并收到以下错误:
Internal Server Error:The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
。
我将应用简化为:
from flask import Flask
import json
app = Flask(__name__)
@app.route('/')
@app.route('/index')
def index():
return 'Index'
@app.route('/courses')
def courses():
with open('courses.json', 'r') as f:
these_courses = json.load(f)
return str(these_courses)
如果我转到索引页面,我会看到索引,正如预期的那样,但如果我尝试转到/courses
,那么我会收到错误。整个事情在localhost
上正常运行,然后是相同的代码我在服务器上收到错误,所以我知道从文件读取工作正常。这让我觉得这可能是json与pythonanywhere相结合的独特问题。
编辑:可能是courses.json
的路径名称存在问题,但它位于同一目录中,所以我觉得它应该没问题,只是一个想法
答案 0 :(得分:2)
原来这是一个路径名问题。我想文件需要从根目录路由。
我跑了:
def courses():
my_dir = os.path.dirname(__file__)
json_file_path = os.path.join(my_dir, 'courses.json')
return json_file_path
找到路径,然后将功能更改为:
def courses():
with open('/home/username/path/to/file/courses.json', 'r') as f:
these_courses = json.load(f)
return str(these_courses)
现在它起作用了:D
然后,为了制作一个在移动项目时不会破坏的更好的版本,我这样做了:
def courses():
my_dir = os.path.dirname(__file__)
json_file_path = os.path.join(my_dir, 'courses.json')
with open(json_file_path, 'r') as f:
these_courses = json.load(f)
return str(these_courses)
答案 1 :(得分:0)
作为替代:
import pathlib
path = pathlib.Path('courses.json').absolute()
these_courses = json.loads(path.read_text())