首页 > 解决方案 > 加载我的数据库页面(Flask/Heroku)时如何修复内部服务器错误?

问题描述

我有一个非常基本的 Heroku 网络应用程序,您可以在其中单击链接(在主页上)以重定向到其他页面。我这样做是为了测试数据库页面。除了单击查看数据库页面时,所有页面都可以正常工作。当我尝试时,我收到一条错误消息:

内部服务器错误
服务器遇到内部错误,无法完成您的请求。
服务器过载或应用程序出错。

我确实尝试过使用 procfile,但最终没有任何效果。我当前的 proctfile 如下所示:

web: gunicorn flask-sqlalchemy-test-02.wsgi:application --log-file=-

老实说,我不太确定是 procfile 还是 sytaxapp.py导致了我的问题。

我的 app.py 文件:

import os
import psycopg2
from flask import Flask, render_template, g, url_for

app = Flask(__name__)
DATABASE_URL = os.environ.get('postgres://fikwczdiymxhwf:73bf42c2c8a15fa59b77e93654b6383e1cf4f85bdf0156818d1cf39a77815f13@ec2-54-243-47-196.compute-1.amazonaws.com:5432/d3uburco4fea1b'

@app.route('/')
def index():
    return render_template("index.html")

@app.route('/page2')
def page_2():
    return render_template("random_page_2.html")

@app.route('/hello')
def hello():
    return render_template("hello.html")

@app.route('/view_database')
def view_db():
    conn = psycopg2.connect(DATABASE_URL)
    db = conn.cursor()
    data = db.execute("SELECT * FROM example").fetchall()
    db.close()
    conn.close()
    return render_template('view_database.html', data=data)

我希望以无序列表的形式查看数据库,但收到了一条错误消息:

内部服务器错误
服务器遇到内部错误,无法完成您的请求。
服务器过载或应用程序出错。

标签: pythonpostgresqlherokuflaskinternal-server-error

解决方案


您使用 os.environ.get() 的方式是错误的。

os.environ.get() 用于获取你的操作系统导出的环境变量,所以DATABASE_URL返回None,你无法连接到NoneURL,所以内部服务器错误。

**正确方法:**首先,导出环境变量,如果使用Linux:

export DATABASE_URL=postgres://fikwczdiymxhwf:73bf42c2c8a15fa59b77e93654b6383e1cf4f85bdf0156818d1cf39a77815f13@ec2-54-243-47-196.compute-1.amazonaws.com:5432/d3uburco4fea1b

然后,在您的代码中,将该行替换为:

DATABASE_URL = os.environ.get('DATABASE_URL', '')

推荐阅读