Как восстановить / перезагрузить приложение, когда внешняя конфигурация / база данных изменяется во Flask - PullRequest
0 голосов
/ 21 мая 2019

Я делаю сервер для конвертации Rmarkdown в приложения Dash. Идея состоит в том, чтобы проанализировать все параметры в файле rmd и сделать соответствующие входные данные Dash. Затем добавьте кнопку отправки, которая скомпилирует rmd в html и вернет iframe. Я использую внешнюю базу данных для хранения информации о путях rmd, чтобы пользователь мог динамически добавлять файлы. Проблема заключается в том, что при изменении файла rmd сервер должен повторно проанализировать файл и заново создать приложение и обслуживать его по тому же URL-адресу. У меня нет элегантного решения. Прямо сейчас я делаю что-то вроде этого.

server = Flask(__name__)

@server.route(“rmd/path:path”):
def convert_rmd_to_dash(path):
  file = get_file_path_from_db(path)
  mtime = get_last_modified_time(file)
  cached_app, cached_mtime = get_cache(path)
  if cached_mtime == mtime:
    return cached_app
  inputs = parse_file(file)
  app = construct_dash_app(inputs)
  return app.index()

def construct_dash_app(inputs):
  app = dash.Dash(
      name,
      server=server,
      routes_pathname_prefix=’/some_url_user_will_never_use/’ + file_name + time.time())
  app.layout = …
  …
  return app

Это работает, но я получаю много правил маршрутизации в / some_url_user_will_never_use. Может быть возможна прямая перезапись rmd / path, но она выглядит хакерской на основании ответа Stackoveflow. Есть ли лучшее решение? Спасибо.

...