500 Внутренняя ошибка сервера - GCP App Engine - PullRequest
0 голосов
/ 31 октября 2019

Я играю в GCP App Engine и пытаюсь использовать python для соединения с базой данных MySQL, затем возвращаю / печатаю первую строку определенной таблицы, чтобы при щелчке ссылки на приложение в браузере отображалось что-то подобное:


sub_event_id = 1234567

event_type = 1

date_time = 2019-09-22 00: 00: 00

ip = неизвестно

property_id = 1

contact_id = 1234567

address_id = 1234567


Ниже приведен код, который я использую, и ошибка, которую я получаю после того, как яразвернуть приложение. Может кто-нибудь посоветовать, что я делаю не так? Спасибо.

Вот код в моем файле main.py:

from flask import Flask
import sqlalchemy as sa
app = Flask(__name__)
@app.route('/')
def dbresponse():
  engine = sa.create_engine('''mysql+pymysql://{username}:
                             {password}@{host}:{port}/{db_name}''')
      with engine.connect() as conn:
          # Execute the query and fetch all results
          response = conn.execute(
              "SELECT * FROM sub_events "
              "LIMIT 1"
          ).fetchall()
          # Print results
          for row in response:
              print("sub_event_id = ", row[0], )
              print("event_type   = ", row[1])
              print("date_time    = ", row[2])
              print("ip           = ", row[3])
              print("property_id  = ", row[4])
              print("contact_id   = ", row[5])
              print("address_id   = ", row[6], "\n")
      engine.dispose()


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

Вот код в моем файле app.yaml:

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

Вот код в моем файле require.txt:

Flask==1.1.1
gunicorn==19.9.0
SQLAlchemy==1.3.8
PyMySQL==0.9.3

После запуска gcloud app deploy и gcloud app browse, затем нажмитессылка, которая генерируется ...

Я получаю 500 Внутренняя ошибка сервера:

500 Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибкуи не смог выполнить ваш запрос. Либо сервер перегружен, либо в приложении произошла ошибка.

1 Ответ

0 голосов
/ 31 октября 2019

Наличие целочисленного индекса в этом цикле for накладывает высокий риск IndexError.

Я бы сначала проверил, имеют ли строки этот размер перед печатью.

Есть два способа сделать это (используя попытку или проверку len):

      for row in response:
          try:
              print("sub_event_id = ", row[0], )
              print("event_type   = ", row[1])
              print("date_time    = ", row[2])
              print("ip           = ", row[3])
              print("property_id  = ", row[4])
              print("contact_id   = ", row[5])
              print("address_id   = ", row[6], "\n")
          except IndexError:
              print("There is not complete data to print.")

или

        for row in response:
            if len(row) >= 7: 
                print("sub_event_id = ", row[0], )
                print("event_type   = ", row[1])
                print("date_time    = ", row[2])
                print("ip           = ", row[3])
                print("property_id  = ", row[4])
                print("contact_id   = ", row[5])
                print("address_id   = ", row[6], "\n")
            else:
                print("There is not complete data to print.")

Рекомендуется также настраивать журналы, как указано @jkleinne.

...