Приложение Azure Flask | Azure SQL — pyodbc.Время ожидания ошибки операции с load_dotenv()

#flask #azure-web-app-service #dotenv #azure-sql

Вопрос:

У меня есть приложение Flask, работающее в Azure с подключением к базе данных SQL Azure, и после описанных ниже событий я больше не могу получить доступ к базе данных.

Вот что я недавно добавил :

  • создал .env файл для защиты строки подключения
  • добавил .gitignore
  • добавил следующее в свой main.py:
     connection_string = textwrap.dedent(f'''  Driver={driver};  Server={os.getenv("SERVER")};  Database={os.getenv("DB_NAME")};  Uid={os.getenv("DB_USER")};  Pwd={os.getenv("PASSWORD")};  Encrypt=yes;  TrustServerCertificate=no;  Connection Timeout=30;  ''')  
  • Я также добавил следующее для запуска в производство :
     if __name__ == '__main__':  from waitress import serve  serve(app, host="0.0.0.0", port=8080)  

Он отлично работает локально, но как только я развертываю его в Azure, у меня возникают проблемы с развертыванием docker в фоновом режиме. Похоже, параметры строк подключения не распознаются из-за следующей ошибки (из Kudu) :

 Warning 2021-10-15T12:42:51.4960727  [2021-10-15 12:42:51  0000] [40] [ERROR] Exception in worker process   Ok 2021-10-15T12:42:51.4961108  Traceback (most recent call last):   Ok 2021-10-15T12:42:51.4961177   File "/tmp/8d98fd8a8763182/antenv/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker   Ok 2021-10-15T12:42:51.4961354   worker.init_process()   Ok 2021-10-15T12:42:51.4961403   File "/tmp/8d98fd8a8763182/antenv/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process   Ok 2021-10-15T12:42:51.4961451   self.load_wsgi()   Ok 2021-10-15T12:42:51.4961495   File "/tmp/8d98fd8a8763182/antenv/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi   Ok 2021-10-15T12:42:51.4961542   self.wsgi = self.app.wsgi()   Ok 2021-10-15T12:42:51.4961586   File "/tmp/8d98fd8a8763182/antenv/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi   Ok 2021-10-15T12:42:51.4961638   self.callable = self.load()   Ok 2021-10-15T12:42:51.4961682   File "/tmp/8d98fd8a8763182/antenv/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load   Ok 2021-10-15T12:42:51.4961729   return self.load_wsgiapp()   Ok 2021-10-15T12:42:51.4961772   File "/tmp/8d98fd8a8763182/antenv/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp   Ok 2021-10-15T12:42:51.496182   return util.import_app(self.app_uri)   Ok 2021-10-15T12:42:51.4961864   File "/tmp/8d98fd8a8763182/antenv/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app   Ok 2021-10-15T12:42:51.496191   mod = importlib.import_module(module)   Ok 2021-10-15T12:42:51.4961956   File "/opt/python/3.8.6/lib/python3.8/importlib/__init__.py", line 127, in import_module   Ok 2021-10-15T12:42:51.4962002   return _bootstrap._gcd_import(name[level:], package, level)   Ok 2021-10-15T12:42:51.496308   File "", line 1014, in _gcd_import   Ok 2021-10-15T12:42:51.496315   File "", line 991, in _find_and_load   Ok 2021-10-15T12:42:51.4963197   File "", line 975, in _find_and_load_unlocked   Ok 2021-10-15T12:42:51.4963244   File "", line 671, in _load_unlocked   Ok 2021-10-15T12:42:51.496329   File "", line 783, in exec_module   Ok 2021-10-15T12:42:51.4963337   File "", line 219, in _call_with_frames_removed   Ok 2021-10-15T12:42:51.4963383   File "/tmp/8d98fd8a8763182/main.py", line 104, in    Ok 2021-10-15T12:42:51.4965707   con, cur = AZconnect()   Ok 2021-10-15T12:42:51.496577   File "/tmp/8d98fd8a8763182/main.py", line 91, in AZconnect   Ok 2021-10-15T12:42:51.4965817   con: pyodbc.Connection = pyodbc.connect(connection_string)   Warning 2021-10-15T12:42:51.4965863  pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')  

Я совершенно уверен, что сделал что-то не так с .env и load_dotenv (), но я не вижу, где.

Ответ №1:

Я понял свою ошибку ; .gitignore я решил использовать .env файл так, как он должен, поэтому переменная среды не могла быть установлена. Затем я установил эти переменные в настройках приложения Azure, и это сработало просто отлично :

параметры приложения azure