简体   繁体   中英

Flask projects on heroku returns 500 internal server error

I have a basic flask project and i deploy it to heroku. And page returns 500 internal server error. I m not using database. Here is my logs :

2015-01-10T23:40:03.161880+00:00 heroku[web.1]: Starting process with command `gunicorn print:app --log-file=-`
2015-01-10T23:40:03.827603+00:00 app[web.1]: [2015-01-10 23:40:03 +0000] [2] [INFO] Using worker: sync
2015-01-10T23:40:03.827516+00:00 app[web.1]: [2015-01-10 23:40:03 +0000] [2] [INFO] Listening at: http://0.0.0.0:5144 (2)
2015-01-10T23:40:03.835308+00:00 app[web.1]: [2015-01-10 23:40:03 +0000] [8] [INFO] Booting worker with pid: 8
2015-01-10T23:40:03.887218+00:00 app[web.1]: [2015-01-10 23:40:03 +0000] [9] [INFO] Booting worker with pid: 9
2015-01-10T23:40:03.826883+00:00 app[web.1]: [2015-01-10 23:40:03 +0000] [2] [INFO] Starting gunicorn 19.1.1
2015-01-10T23:40:04.268774+00:00 heroku[web.1]: State changed from starting to up
2015-01-10T23:41:19.847544+00:00 heroku[router]: at=info method=GET path="/" host=topstreaks.herokuapp.com request_id=a2450ab9-3183-473f-aa0e-8e970b266b28 fwd="88.238.99.0" dyno=web.1 connect=1ms service=26ms status=500 bytes=456
2015-01-10T23:41:20.206409+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=topstreaks.herokuapp.com request_id=1c969a6b-a8e7-4fcd-b84a-81b55cec18a6 fwd="88.238.99.0" dyno=web.1 connect=1ms service=2ms status=404 bytes=527
2015-01-10T23:41:24.949004+00:00 heroku[router]: at=info method=GET path="/" host=topstreaks.herokuapp.com request_id=7f90b786-3ec9-49ab-b51a-a2cd942bc83d fwd="88.238.99.0" dyno=web.1 connect=1ms service=13ms status=500 bytes=456
2015-01-10T23:44:05.320256+00:00 heroku[router]: at=info method=GET path="/" host=topstreaks.herokuapp.com request_id=8c0a51bd-459c-438e-8184-911557410c95 fwd="88.238.99.0" dyno=web.1 connect=3ms service=3ms status=500 bytes=456
2015-01-10T23:44:05.697401+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=topstreaks.herokuapp.com request_id=59f43b94-fb30-414a-9a28-6ae7c195bd4b fwd="88.238.99.0" dyno=web.1 connect=0ms service=2ms status=404 bytes=527
2015-01-10T23:48:29.595955+00:00 heroku[router]: at=info method=GET path="/" host=topstreaks.herokuapp.com request_id=13941ed3-2496-4d0e-aacc-5fb6a7a122e9 fwd="88.238.99.0" dyno=web.1 connect=3ms service=2ms status=500 bytes=456
2015-01-10T23:48:47.739233+00:00 heroku[router]: at=info method=GET path="/" host=topstreaks.herokuapp.com request_id=6c370ced-99fe-429a-829b-0ea55b4aa508 fwd="88.238.99.0" dyno=web.1 connect=0ms service=2ms status=500 bytes=456
2015-01-10T23:52:15.563473+00:00 heroku[router]: at=info method=GET path="/" host=topstreaks.herokuapp.com request_id=a0ceaf25-359e-4bc1-9247-5d6f478d1dd2 fwd="88.238.99.0" dyno=web.1 connect=0ms service=1ms status=500 bytes=456
2015-01-10T23:52:20.050874+00:00 heroku[router]: at=info method=GET path="/" host=topstreaks.herokuapp.com request_id=1086dffb-e144-4873-b49b-5e4ac44477f3 fwd="88.238.99.0" dyno=web.1 connect=0ms service=2ms sta
tus=500 bytes=456

The server looks up but i cant find internal error on logs or anywhere. It runs fine on local. How can i find error on heroku because debug mod not working although i write debug = True on flask.

And flask code :

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')


def home():
    return render_template('topstreaks.html')

@app.route('/script')
def script():
    return render_template('datum.js')

@app.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
    response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
    return response

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

How can i debug for error ?

I tried this locally and found out you have you can see what is wrong by setting a logger in your application and making it print to stdout

from flask import Flask, render_template
import sys
import logging
app = Flask(__name__)

app.logger.addHandler(logging.StreamHandler(sys.stdout))
app.logger.setLevel(logging.ERROR)

That way when you run on heroku, any errors will be printed on heroku logs

Funny though it that when trying to setup this for testing, I ran into a problem similar to yours. The templates (html) must be inside a templates folder on the root of your project, my test template wasn't and that caused the 500 for me, it might be the cause of your 500 too.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM