简体   繁体   中英

need help fixing 500 error python/flask app

I am attempting to run a simple python app on a flask framework with a Twilio API . I am developing in a virtualenv with the following dependencies:

  • Flask
  • Jinja2
  • MarkupSafe
  • Werkzeug
  • argparse
  • gunicorn
  • httplib2
  • itsdangerous
  • six
  • twilio
  • unittest2
  • wsgiref

when I run using foreman my index page renders fine and loads TwiML fine, but my /sms page where I am handling sms responses continues to receive a 500 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." Same error occurs if I push to Heroku. Below is my code, any ideas?

from flask import Flask, request, redirect, session
import twilio.twiml
from twilio.rest import TwilioRestClient
import os

SECRET_KEY = 'a secret key'

#initialize app
app = Flask(__name__)
app.config.from_object(__name__)

@app.route('/')
def index():
    return 'hello'

@app.route("/sms", methods = ['GET', 'POST'])
def sms():  
    """Respond with the number of text messages sent between two parties."""
    counter = session.get('counter', 0)
    counter += 1
    if counter > 6:
        counter = 1
    session['counter'] = counter

    score = session.get('score', 0)
    answer = request.values.get('Body', '')
    answer_response = False
    response = False
    if counter == 1:
        response = "Welcome to our healthcare knowledge quiz. First question: What’s the average annual premium for family coverage on an employer health plan?"
    elif counter == 2:
        answer_response = "No, the average annual premium for family coverage on an employer health plan is $15,745."
        if answer.lower() == 'b':
            answer_response = "That's correct!"
            score += 1
        response = "Second question: What percentage of employer health premiums do workers pay, on average? A) 27.4%, B) 17.1%, C) 50.3%, or D) 5.8%"
    elif counter == 3:
        answer_response = "No, the average percentage of employer health premiums paid by workers is 27.4%"
        if answer.lower() == 'a':
            answer_response = "That's correct!"
            score += 1
        response = "3rd question: When do Americans have to purchase health insurance or face a penalty? A) January 2015, B) January 2014, C) December 2013, or D) December 2015."
    elif counter == 4:
        answer_response = "No, most Americans have to purchase health insurance or face a penalty under the federal healthcare law by January 2014."
        if answer.lower() == 'b':
            answer_response = "That's correct!"
            score += 1
        response = "4th question: What percentage of U.S. small businesses offered health benefits to their workers in 2010? A) 49%, B) 69%, C) 32%, or D) 58%."
    elif counter == 5:
        answer_response = "No, the percentage of U.S. small businesses which offered health benefits in 2010 was 49%."
        if answer.lower() == 'a':
            answer_response = "That's correct!"
            score += 1
        response = "5th question: How many people under 26 have been added to health plans as part of the Affordable Care Act? A) 5.6 mil., B) 0.5 mil., C) 2.9 mil., or D) 1.3 mil."
    elif counter == 6:
        answer_response = "No, 2.9 million young adults under age 26 have been added to parents' health plans as part of the Affordable Care Act."
        if answer.lower() == 'c':
            answer_response = "That's correct!"
            score +=1
        response = "Thanks for taking the healthcare quiz! You correctly answered %d out of 5 questions" % score

    session['score'] = score

    resp = twilio.twiml.Response()
    if answer_response:
        resp.sms(answer_response)
    resp.sms(response)
    return str(resp)

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

for Kevin Burke

Heroku logs:

2013-09-25T05:50:03.933994+00:00 heroku[web.1]: Starting process with command `gunicorn app_SMS_demo:app`
201
3-09-25T05:50:04.812490+00:00 app[web.1]: 2013-09-25 05:50:04 [2] [INFO] Handling signal: term
2013-09-25T05:50:04.812967+00:00 app[web.1]: 2013-09-25 05:50:04 [7] [INFO] Worker exiting (pid: 7)
2013-09-25T05:50:04.888387+00:00 app[web.1]: 2013-09-25 05:50:04 [2] [INFO] Shutting down: Master
2013-09-25T05:50:06.437279+00:00 app[web.1]: 2013-09-25 05:50:06 [2] [INFO] Starting gunicorn 18.0
2013-09-25T05:50:06.438326+00:00 app[web.1]: 2013-09-25 05:50:06 [2] [INFO] Listening at: http://0.0.0.0:53890 (2)
2013-09-25T05:50:06.438549+00:00 app[web.1]: 2013-09-25 05:50:06 [2] [INFO] Using worker: sync
2013-09-25T05:50:06.467209+00:00 app[web.1]: 2013-09-25 05:50:06 [7] [INFO] Booting worker with pid: 7
2013-09-25T05:50:06.998082+00:00 heroku[web.1]: State changed from starting to up
2013-09-25T05:50:07.065070+00:00 heroku[web.1]: Process exited with status 0
2013-09-25T05:50:10.438774+00:00 heroku[router]: at=info method=GET path=/ host=quiet-tundra-1590.herokuapp.com fwd="76.126.150.1" dyno=web.1 connect=1ms service=2648ms status=200 bytes=5
2013-09-25T05:52:44.200768+00:00 heroku[router]: at=info method=GET path=/ host=quiet-tundra-1590.herokuapp.com fwd="76.126.150.1" dyno=web.1 connect=2ms service=5ms status=200 bytes=5
2013-09-25T05:52:53.941483+00:00 heroku[router]: at=info method=GET path=/sms host=quiet-tundra-1590.herokuapp.com fwd="76.126.150.1" dyno=web.1 connect=1ms service=177ms status=500 bytes=291

I was directed to a solution by Joël Franusic, Developer Advocate for Twilio. It turns out it was a unicode issue. I used text from another website to form the quiz. Within the text was a hidden apostrophe of unicode origin instead of the expected UTF-8, this prevented Green Unicorn from running.

Lesson learned - do not copy webtext, retype all, to prevent errors, or use a noticeable font on your text editor or IDE that you can tell the difference between the two font types.

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