Теперь, когда я вижу, как вы развертываете приложение, я могу сказать, что это ожидаемое поведение. Да, ваш custom_shiny_deployment()
имеет доступ к данным, но развернутое приложение не имеет доступа, потому что rsconnect::deployApp()
не отправляет объекты из вызывающей среды. Если вы хотите, чтобы данные были доступны для приложения, я рекомендую сохранить их (и отслеживать с помощью file_in()
и file_out()
), а затем передать их в аргумент appFiles
для deployApp()
через custom_shiny_deployment()
.
РЕДАКТИРОВАТЬ
Ваш app.R
может оставаться таким, какой он есть.
app.R
то же самое, что вы написали.
library(shiny)
cars_data <- readRDS("cars_data.RDS")
shinyApp(
ui = fluidPage(
selectInput("variable", "Variable:",
c("Cylinders" = "cyl",
"Transmission" = "am")),
tableOutput("data")
),
server = function(input, output) {
output$data <- renderTable({
cars_data[, c("mpg", input$variable), drop = FALSE]
}, rownames = TRUE)
}
)
Но с drake
, вам нужно что-то вроде file_in()
и file_out()
, чтобы гарантировать, что правильные цели работают в правильном порядке и в ответ на изменения в cars_data.RDS
и app.R
.
library(drake)
plan <- drake_plan(
cars_data = mtcars,
save_cars = saveRDS(cars_data, file_out("cars_data.RDS")),
deployment = rsconnect::deployApp(
appFiles = file_in("app.R", "cars_data.RDS"),
appName = "cars",
forceUpdate = TRUE
)
)
make(plan)
Если вы действительно хотите, чтобы appFiles
было NULL
, drake
по-прежнему требуется file_in()
, чтобы он знал, что зависит от физических файлов.
plan <- drake_plan(
cars_data = mtcars,
save_cars = saveRDS(cars_data, file_out("cars_data.RDS")),
deployment = deploy_app(file_in("cars_data.RDS", "app.R"))
)
deploy_app <- function(...) {
rsconnect::deployApp(
appFiles = NULL,
appName = "cars",
forceUpdate = TRUE
)
}
В любом случае, я рекомендую проверить план с помощью plot()
или vis_drake_graph()
перед запуском с make()
. Оба плана выше показывают deployment
ниже по потоку от файла данных (с входящими стрелками), что именно то, что нам нужно.
plot(plan)
Without these file markers, there is a chance that drake
will deploy the app before the data is ready to go.
disconnected_plan <- drake_plan(
cars_data = mtcars,
saveRDS(cars_data, "cars_data.RDS"),
deployment = rsconnect::deployApp(
appFiles = NULL,
appName = "cars",
forceUpdate = TRUE
)
)
plot(disconnected_plan)
введите описание изображения здесь