我正在尝试使用secret包为我的 Shiny 应用程序(API 密钥、数据库凭据)存储应用程序机密。我已经正确设置了保管库并可以从控制台访问,并添加了一个测试密码(名称“test”,里面有一些 foobar 文本)。
我有一个包含两个文件的 Shiny 设置 ( ui.r
/ server.r
),并试图在 UI 中打印测试值以证明它在构建更复杂的东西之前有效。
ui.r:
library(shiny)
library(leaflet)
library(secret)
# Leaflet example UI.
ui <- fluidPage(
leafletOutput("mymap"),
p(get_secret("test")),
actionButton("recalc", "New points")
)
服务器.R:
library(shiny)
library(leaflet)
server <- function(input, output, session) {
points <- eventReactive(input$recalc, {
cbind(rnorm(40) * 2 + 13, rnorm(40) + 48)
}, ignoreNULL = FALSE)
output$mymap <- renderLeaflet({
leaflet() %>%
addProviderTiles(providers$Stamen.TonerLite,
options = providerTileOptions(noWrap = TRUE)
) %>%
addMarkers(data = points())
})
}
奇怪的是,使用 ui.R 或 server.R - 顶部的“运行应用程序”命令运行时出现错误Error : secret ‘test’ does not exist
,或者使用 cmd+shift+enter。据我了解,这运行runApp('app')
.
但是,如果我明确调用shinyApp(ui = ui, server = server)
,就好像这是一个单文件应用程序一样,它会正常运行,包含所有内容:请参阅地图下方的 foobar 文本。
如果我删除get_secret()
UI.r 中的调用,则该runApp()
方法有效(显然,这不是秘密)。
我真的更喜欢使用双文件结构来帮助管理复杂性,但不知道如何在 RStudio 中运行它并让我的秘密保险库可以访问。
谢谢你的帮助!