加载我的数据库页面时如何修复内部服务器错误 (Flask/Heroku)?
How to fix internal server error when loading my database page (Flask/Heroku)?
我有一个非常基本的 Heroku 网络应用程序,您可以在其中单击链接(在主页上)以重定向到其他页面。我这样做是为了测试数据库页面。当我单击以查看数据库页面时,所有页面都可以正常工作。当我尝试时收到一条错误消息:
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.
我确实尝试使用 procfile,但最终没有任何效果。我当前的 proctfile 如下所示:
web: gunicorn flask-sqlalchemy-test-02.wsgi:application --log-file=-
老实说,我不太确定是 app.py
中的 procfile 还是语法导致了我的问题。
我的 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)
我希望以无序列表的形式查看数据库,但却收到一条错误消息:
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.
您使用 os.environ.get() 的方式是错误的。
os.environ.get()用于获取你的OS导出的环境变量,所以DATABASE_URL
returnsNone,你无法连接到None
URL,所以内部服务器错误。
**正确方式:**
首先,导出环境变量,如果使用 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', '')
我有一个非常基本的 Heroku 网络应用程序,您可以在其中单击链接(在主页上)以重定向到其他页面。我这样做是为了测试数据库页面。当我单击以查看数据库页面时,所有页面都可以正常工作。当我尝试时收到一条错误消息:
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.
我确实尝试使用 procfile,但最终没有任何效果。我当前的 proctfile 如下所示:
web: gunicorn flask-sqlalchemy-test-02.wsgi:application --log-file=-
老实说,我不太确定是 app.py
中的 procfile 还是语法导致了我的问题。
我的 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)
我希望以无序列表的形式查看数据库,但却收到一条错误消息:
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.
您使用 os.environ.get() 的方式是错误的。
os.environ.get()用于获取你的OS导出的环境变量,所以DATABASE_URL
returnsNone,你无法连接到None
URL,所以内部服务器错误。
**正确方式:** 首先,导出环境变量,如果使用 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', '')