簡體   English   中英

Flask-Pymongo應用程序部署到Heroku時出現服務器錯誤……我缺少什么?

[英]Server error on Flask-Pymongo app deployed to Heroku… what am I missing?

我將在此處嘗試提供盡可能多的信息。 該應用程序在本地可以正常運行。 該應用程序已成功部署,我可以進入登錄屏幕...但是登錄時,我會看到以下錯誤: 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. 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.

對於冗長的瘋狂帖子,我表示歉意,但我想確保自己掌握了所有可能有用的信息...

我當前的文件結構:

-static
--client side js, css, images etc
-templates
--all my templates
-app.py
-Pipfile
-Pipfile.lock
-Procfile
-requirements.txt

app.py:

from flask import Flask, render_template, url_for, request, session, redirect, jsonify, json, flash
from flask_pymongo import PyMongo
from jinja2 import Template, TemplateNotFound
from bson.json_util import dumps
from bson.objectid import ObjectId
import pprint

app = Flask(__name__)


app.config['MONGO_DBNAME'] = 'heroku_fbdc95hs'
app.config['MONGO_URI'] = 'mongodb://<username>:<password>@ds161529.mlab.com:61529/heroku_fbdc95hs'

mongo = PyMongo(app)


@app.route("/")
def index():
    if 'username' in session:
        return render_template('dashboard.html')

    return render_template('index.html')

@app.route("/dashboard")
def dashboard():
    if 'username' not in session:
        return render_template('index.html')

    return render_template('dashboard.html')

@app.route("/student/<string:student_id>")
def student(student_id):
    if 'username' not in session:
        return render_template('index.html')

    print (student_id)
    students = mongo.db.students
    current_student = students.find_one({'_id' : ObjectId(student_id)})
    print(current_student)
    return render_template('student.html', current_student=current_student)


@app.route("/find_all")
def find_all():
    if 'username' not in session:
        return render_template('index.html')

    students = mongo.db.students.find()
    return render_template('view-students.html', students=students)

@app.route("/find_ee")
def find_ee():
    if 'username' not in session:
        return render_template('index.html')

    students = mongo.db.students.find({"major" : "B.S. Electrical Engineering" })
    return render_template('view-students.html', students=students)


@app.route("/find_ce")
def find_ce():
    if 'username' not in session:
        return render_template('index.html')

    students = mongo.db.students.find({"major" : "B.S. Computer Engineering" })
    return render_template('view-students.html', students=students)

@app.route("/probation")
def probation():
    if 'username' not in session:
        return render_template('index.html')

    students = mongo.db.students.find({"standing" : "Probation" })
    return render_template('view-students.html', students=students)



@app.route("/find_uid", methods=['GET', 'POST'])

def find_uid():
    if 'username' not in session:
        return render_template('index.html')

    if request.method == 'POST':
        result = request.form['uid-input']
        students = mongo.db.students.find({"student_id" : result })

    return render_template('view-students.html', students=students)

@app.route("/view-students")
def view_students():
    if 'username' not in session:
        return render_template('index.html')

    return render_template('view-students.html')

@app.route("/add-student")
def add_student():
    if 'username' not in session:
        return render_template('index.html')


    return render_template('add-student.html')


@app.route('/login', methods=['POST'])
def login():
    users = mongo.db.users
    login_user = users.find_one({'username' : request.form['username']})

    if login_user:
        if request.form['password'] == login_user['password']:
            session['username'] = request.form['username']
            return redirect(url_for('dashboard'))
        return 'Invalid username/password combination'
    return 'Invalid username/password combination'

@app.route('/add', methods=['GET','POST'])
def add():
    if request.method == 'POST':
        students = mongo.db.students
        existing_student = students.find_one({'student_id' : request.form['student_id']})

        if existing_student is None:
            students.insert({'first_name' : request.form['first_name'],
                'last_name' : request.form['last_name'],
                'student_id' : request.form['student_id'],
                'major' : request.form['major'],
                'standing' : request.form['standing'],
                'email' : request.form['email'],
                'phone' : request.form['phone'],
                'transfer' : request.form['transfer']})
            flash("Student successfully added!")
            return redirect(url_for('add'))

        flash("A student with that ID already exists!")


    return render_template('add-student.html')


@app.route('/logout')
def logout():
    session.clear()
    return redirect(url_for('index'))


if __name__ == "__main__":
    app.secret_key = 'mysecret'
    app.run(debug=True)

點文件:

[requires]
python_full_version = "2.7.14"

程序文件:

web: gunicorn --bind 0.0.0.0:$PORT app:app

日志:

2018-04-28T02:37:03.799600+00:00 heroku[router]: at=info method=GET path="/dashboard" host=studentsrm.herokuapp.com request_id=c303aed1-a45e-4b84-912a-755fc582c0a5 fwd="73.98.161.187" dyno=web.1 connect=0ms service=3ms status=200 bytes=2582 protocol=https
2018-04-28T02:37:03.794207+00:00 app[web.1]: 10.151.201.12 - - [28/Apr/2018:02:37:03 +0000] "GET /dashboard HTTP/1.1" 200 2420 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
2018-04-28T02:37:14.577644+00:00 heroku[router]: at=info method=POST path="/login" host=studentsrm.herokuapp.com request_id=ae63c35d-d93f-4240-bbdd-10306d31961b fwd="73.98.161.187" dyno=web.1 connect=1ms service=12ms status=500 bytes=456 protocol=https
2018-04-28T02:37:14.570254+00:00 app[web.1]: [2018-04-28 02:37:14,569] ERROR in app: Exception on /login [POST]
2018-04-28T02:37:14.570268+00:00 app[web.1]: Traceback (most recent call last):
2018-04-28T02:37:14.570274+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
2018-04-28T02:37:14.570275+00:00 app[web.1]:     response = self.full_dispatch_request()
2018-04-28T02:37:14.570277+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
2018-04-28T02:37:14.570279+00:00 app[web.1]:     rv = self.handle_user_exception(e)
2018-04-28T02:37:14.570281+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
2018-04-28T02:37:14.570282+00:00 app[web.1]:     reraise(exc_type, exc_value, tb)
2018-04-28T02:37:14.570284+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
2018-04-28T02:37:14.570286+00:00 app[web.1]:     rv = self.dispatch_request()
2018-04-28T02:37:14.570287+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
2018-04-28T02:37:14.570289+00:00 app[web.1]:     return self.view_functions[rule.endpoint](**req.view_args)
2018-04-28T02:37:14.570291+00:00 app[web.1]:   File "/app/app.py", line 113, in login
2018-04-28T02:37:14.570293+00:00 app[web.1]:     session['username'] = request.form['username']
2018-04-28T02:37:14.570294+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/werkzeug/local.py", line 350, in __setitem__
2018-04-28T02:37:14.570296+00:00 app[web.1]:     self._get_current_object()[key] = value
2018-04-28T02:37:14.570298+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/sessions.py", line 130, in _fail
2018-04-28T02:37:14.570299+00:00 app[web.1]:     raise RuntimeError('The session is unavailable because no secret '
2018-04-28T02:37:14.570302+00:00 app[web.1]: RuntimeError: The session is unavailable because no secret key was set.  Set the secret_key on the application to something unique and secret.
2018-04-28T02:37:14.572619+00:00 app[web.1]: 10.151.201.12 - - [28/Apr/2018:02:37:14 +0000] "POST /login HTTP/1.1" 500 291 "https://studentsrm.herokuapp.com/dashboard" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

嘗試這個:-

app.secret_key =“定義您自己選擇的秘密密鑰”

我希望這對你有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM