Проверять разные учетные данные подключения для r в разных средах во время тестирования?
Я не знаю, является ли это плохой конфигурацией, настроенной мной, когда я тестирую подключения к различным сетевым настройкам базы данных.
Пока я тестирую настройку, я хочу, чтобы приложение могло работать с тремя разными настройками:
- Разработка у меня есть на локальной машине.
- В автономном контейнере Docker в пространстве развертывания с использованием сети Docker.
- В пространстве развертывания с использованием сети хост-компьютера
- 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")
}
Это кажется очень затянутым. Есть ли способ лучше?