Nano Hash - криптовалюты, майнинг, программирование

Конфигурация Typesafe HOCON - руководство по замене списков переменных среды?

Вот что я в конечном итоге использую, потому что я не могу правильно заменить переменную. Учитывая раздел Play Framework HOCON для CORS Allowed Origins, который допускает локальное развертывание, развертывание для разработчиков, этап и производство и НЕ соответствует 12 факторам:

play {
  # https://www.playframework.com/documentation/2.5.x/resources/confs/filters-helpers/reference.conf
  filters {
    # use default values for gzip, csrf & security headers
    # setup cors
    cors {
      # whitelist all paths
      pathPrefixes = ["/"]
      allowedOrigins = [
        "http://localhost:8080"
        "http://app.127.0.0.1.nip.io:8080"
        "http://app.192.168.64.2.nip.io"
        "http://app.192.168.42.173.nip.io"
        "http://app.terradatum.local"
        "http://app.dev.terradatum.com"
        "https://app.dev.terradatum.com"
        "http://app.stage.terradatum.com"
        "https://app.stage.terradatum.com"
        "http://app.terradatum.com"
        "https://app.terradatum.com"
      ]
    }
  }
}

Я пробовал оба следующих HOCON, при этом среда также была установлена, как показано:

# HOCON
allowedOrigins = ${?APP_ALLOWED_ORIGINS}
# ENV
export APP_ALLOWED_ORIGINS='"http://app.127.0.0.1.nip.io:8080","http://app.192.168.64.2.nip.io","http://app.192.168.42.173.nip.io","http://app.terradatum.local","http://app.dev.terradatum.com","https://app.dev.terradatum.com","http://app.stage.terradatum.com","https://app.stage.terradatum.com","http://app.terradatum.com","https://app.terradatum.com"'

А также...

# HOCON
allowedOrigins = [
  ${?APP_ALLOWED_ORIGINS}
  "http://app.127.0.0.1.nip.io:8080"
  "http://app.192.168.64.2.nip.io"
  "http://app.192.168.42.173.nip.io"
  "http://app.terradatum.local"
  "http://app.dev.terradatum.com"
  "https://app.dev.terradatum.com"
  "http://app.stage.terradatum.com"
  "https://app.stage.terradatum.com"
  "http://app.terradatum.com"
  "https://app.terradatum.com"
]
# ENV
export APP_ALLOWED_ORIGINS="http://some-new-cors.terradatum.com\nhttps://some-new-cors.terradatum.com\n"

Многие другие реализации CORS допускают регулярное выражение, а WTH не играет?

Кроме того, обработка списков HOCON была для меня очень проблематичной... с первой реализацией выше, работающей, но любая итерация, в которой у меня есть существующий список по умолчанию в application.conf, терпит неудачу...

Каков рекомендуемый метод добавления списков или элементов списка в HOCON с помощью замены переменных среды?


Ответы:


1

Если я правильно прочитал ваше сообщение (я не вижу там настоящего «вопроса»), вы пытаетесь найти способ добавить разные значения в свой список CORS в зависимости от того, в какой среде работает ваше приложение.

Я бы предложил заняться этим с другой точки зрения: создать разные файлы конфигурации, которые содержат значения, которые вы хотите настроить, и включить общий файл application.conf. В конфигурации развертывания заставьте play загружать поэтапную конфигурацию вместо application.conf.

например если вы создаете свой этап разработки, добавьте его в конфигурацию развертывания (при условии, что вы используете sbt-native-packager с докером)

javaOptions in Universal ++= Seq(
  "-Dconfig.resource=application.dev.conf"
)

ваш файл application.dev.conf будет выглядеть так:

include "application.conf"
play.filters.cors {
      # whitelist all paths
      pathPrefixes = ["/"]
      allowedOrigins = [
        "http://localhost:8080"
        "http://app.127.0.0.1.nip.io:8080"
        "http://app.192.168.64.2.nip.io"
        "http://app.192.168.42.173.nip.io"
        "http://app.terradatum.local"
        "http://app.dev.terradatum.com"
        "https://app.dev.terradatum.com"

      ]
    }

проблема в том, что ваша переменная среды - это не список, а строка. В HOCON нет методов преобразования, которые разделили бы вашу строку на список.

Чтобы следовать 12-факторному подходу, вы можете попытаться разделить (изменяющиеся части) вашего списка на что-то вроде

ORIGIN_1=http://localhost:8080
ORIGIN_2=http://app.127.0.0.1.nip.io:8080

а затем включите их в свою конфигурацию, например

play.filters.cors.allowedOrigins = [${?ORIGIN_1}] ${play.filters.cors.allowedOrigins}
play.filters.cors.allowedOrigins = [${?ORIGIN_2}] ${play.filters.cors.allowedOrigins}
15.04.2017
  • Это ответ, но на самом деле это не то, что я ищу... хотя вы делаете хорошее замечание, и я обновил свой вопрос, чтобы включить вопрос. Если вы прочтете руководство для 12-факторного приложения, вы увидите, что фундаментальным требованием является возможность изменения конфигурации вашего приложения через среду. Конечно, это невозможно в 100% случаев (встроенные файлы reference.conf, которые не соответствуют режиму замены env), и, возможно, разрешенные источники CORS — не лучший пример, но мне все еще нужно это решить. 16.04.2017
  • Да, вы ответили на вторую часть моего вопроса - добавление элемента списка в список HOCON. 16.04.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..