Проверять разные учетные данные подключения для r в разных средах во время тестирования?

Я не знаю, является ли это плохой конфигурацией, настроенной мной, когда я тестирую подключения к различным сетевым настройкам базы данных.

Пока я тестирую настройку, я хочу, чтобы приложение могло работать с тремя разными настройками:

  1. Разработка у меня есть на локальной машине.
  2. В автономном контейнере Docker в пространстве развертывания с использованием сети Docker.
  3. В пространстве развертывания с использованием сети хост-компьютера
  4. 2/3, но в контейнере с блестящим прокси

Все они имеют незначительно разные настройки, но пока я проверяю, какие из этих настроек подключения. Первые три работают, а 2 и 3 нет.

Кроме того, 2, 3 и 4 используют один и тот же файл .Renviron, поскольку я хочу иметь возможность создать настройку и заставить ее использовать первую, которая работает в соответствии с предпочтительным порядком настройки. Это упростит передачу обслуживания для клиентов, поскольку они смогут выбрать, насколько безопасным будет ее выполнение.

Я использую RPostgres для подключения.

Я хочу иметь возможность использовать один и тот же код приложения для каждой настройки, но иметь возможность называть переменные среды по-разному, чтобы оставить два варианта подключения для развертывания.

Вот мой план, но он кажется затянутым.

Сначала проверьте все подключения, используя разные учетные данные и присвоив переменной значение true false. Код украден с https://github.com/brry/berryFunctions/blob/master/R/is.error.R для проверки ошибок.

      admin_connect_error <-
  inherits(try(dbConnect(
    drv = RPostgres::Postgres(),
    dbname = Sys.getenv("ADMINDBNAME"),
    host = Sys.getenv("ADMINHOSTNAME"),
    port = Sys.getenv("ADMINPORTNAME"),
    user = Sys.getenv("ADMINUSERNAME"),
    password = Sys.getenv("ADMINPASSNAME")
  ),
  silent = TRUE)
  ,
  "try-error")

fake_connect_error <-
  inherits(try(dbConnect(
    drv = RPostgres::Postgres(),
    dbname = "db_name",
    host = "host_name",
    port = "port_name",
    user = "user_name",
    password = "pass_name"
  ),
  silent = TRUE)
  ,
  "try-error")

local_connect_error <-
  inherits(tryCatch(
    dbConnect(
      drv = RPostgres::Postgres(),
      dbname = Sys.getenv("USERDBNAME"),
      host = Sys.getenv("LOCHOSTNAME"),
      port = Sys.getenv("LOCPORTNAME"),
      user = Sys.getenv("USERUSERNAME"),
      password = Sys.getenv("USERPASSNAME")
    ),
    silent = TRUE
  ),
  "try-error")

docker_connect_error <-
  inherits(try(dbConnect(
    drv = RPostgres::Postgres(),
    dbname = Sys.getenv("USERDBNAME"),
    host = Sys.getenv("DOCKHOSTNAME"),
    port = Sys.getenv("DOCKPORTNAME"),
    user = Sys.getenv("USERUSERNAME"),
    password = Sys.getenv("USERPASSNAME")
  ),
  silent = TRUE)
  ,
  "try-error")

Во-вторых, проверьте, какие из них верны, и используйте их для настройки dbPool для использования приложением.

      if (local_connect_error == F) {
  print("connection on local machine as host network")
  
  pool <- dbPool(
    drv = RPostgres::Postgres(),
    dbname =  Sys.getenv("USERDBNAME"),
    user = Sys.getenv("USERUSERNAME"),
    password = Sys.getenv("USERPASSNAME"),
    host =  Sys.getenv("LOCHOSTNAME"),
    port = Sys.getenv("LOCPORTNAME")
  )
  
} else if (docker_connect_error == F) {
  print("Connecting on docker network")
  
  pool <- dbPool(
    drv = RPostgres::Postgres(),
    dbname = Sys.getenv("USERDBNAME"),
    host = Sys.getenv("DOCKHOSTNAME"),
    port = Sys.getenv("DOCKPORTNAME"),
    user = Sys.getenv("USERUSERNAME"),
    password = Sys.getenv("USERPASSNAME")
  )
} else if (fake_connect_error == F) {
  print("connection on fake local machine as fake host network")
  
  pool <- dbConnect(
    drv = RPostgres::Postgres(),
    dbname = "db_name",
    host = "host_name",
    port = "port_name",
    user = "user_name",
    password = "pass_name"
  )
  
} else if (admin_connect_error == F) {
  print("connection on admin machine as host admin")
  
  pool <- dbConnect(
    drv = RPostgres::Postgres(),
    dbname = Sys.getenv("ADMINDBNAME"),
    host = Sys.getenv("ADMINHOSTNAME"),
    port = Sys.getenv("ADMINPORTNAME"),
    user = Sys.getenv("ADMINUSERNAME"),
    password = Sys.getenv("ADMINPASSNAME")
  )
  
}else{
  print("DB connection options not working - please debug")
}

Это кажется очень затянутым. Есть ли способ лучше?

0 ответов

Другие вопросы по тегам