You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shinyapps.io上Mapbox令牌存储与多实例访问问题求助

问题:基于Leaflet的Shiny应用部署到shinyapps.io后多用户使用崩溃,且Mapbox令牌配置报错

我开发了一个基于Leaflet的Shiny应用,用Mapbox作为底图。本地运行完全正常,但部署到shinyapps.io后,只要有两个用户同时使用,应用就会崩溃。另外Google API令牌能正常使用,但Mapbox令牌的存储配置一直报错。

具体错误场景

执行以下代码时:

mb_access_token("MAPBOX_TOKEN", install = TRUE)
readRenviron("~/.Renviron")

应用直接关闭,日志提示:

Warning: Error in : A MAPBOX_PUBLIC_TOKEN already exists. You can overwrite it with the argument overwrite=TRUE

添加overwrite = TRUE参数后,又出现新错误:

Error: Mapbox Token already exists

完整代码

library(leaflet)
library(mapboxapi)
library(mapview)
library(shiny)
library(shinydashboard)
library(remotes)
library(dplyr)
library(googleway)
library(tidyverse)
library(pagedown)

dashboard <- dashboardPage(
  skin = "black",
  dashboardHeader(title = "Analytics Tool"),

  dashboardSidebar(
    sidebarMenu(
      menuItem("Kartengrundlage", tabName = "kgl"),
      menuItem("Erreichbarkeit", tabName = "iso")
    )
  ),
  
  dashboardBody(
    tags$style(type = "text/css", "#map {height: calc(100vh - 80px) !important;}"),
    tabItems(
      # First tab content
      tabItem(tabName = "kgl",
              fluidRow(box(width = 12, textInput("ort", "Ort", "TurmstraBe 20, 10551"))),
              fluidRow(box(width = 12, height = 780, solidHeader = TRUE, leaflet::leafletOutput(outputId = "mymap", height = 720), title = "Map"),
                       fluidRow(box(width = 12, solidHeader = TRUE, title = downloadButton("exportmaphtml","Export as HTML"),downloadButton("exportmappdf","Export as pdf"), downloadButton("exportmappng","Export as jpeg"))
                       ))),
      
      # Second tab content
      tabItem(tabName = "iso",
              fluidRow(
              ))
    ))
)


db_server <- function(input, output,session) {
  
  output$exportmappdf <- downloadHandler(
    filename = "map.pdf",
    content = function(file) {
      
      mapshot(map$dat, url = "/map.html", remove_controls = c("zoomControl", "layersControl", "homeButton", "scaleBar",
                                                             "drawToolbar", "easyButton", "control"))
      
      
      chrome_print("map.html", output = "map.pdf" )
      
      file.copy("map.pdf", file)
    }
  ) 
  
  output$exportmaphtml <- downloadHandler(
    filename = "map.html",
    content = function(file) {
      
      mapshot(map$dat, url = paste0(getwd(), "/map.html"), remove_controls = c("zoomControl", "layersControl", "homeButton", "scaleBar",
                                                                               "drawToolbar", "easyButton", "control"))
      
      file.copy(paste0(getwd(), "/map.html"), file)
    }
  )  
  
  
  output$exportmappng <- downloadHandler(
    filename = "map.png",
    content = function(file) {
      
      mapshot(map$dat, url = "map.html", remove_controls = c("zoomControl", "layersControl", "homeButton", "scaleBar",
                                                             "drawToolbar", "easyButton", "control"))
      
      chrome_print("map.html", output = "map.png", format = "png")
      
      file.copy(paste0(getwd(), "/map.png"), file)
    }
  ) 
  
  
  Ort_geocode <- reactive({
    
    Places <-
      google_geocode(
        address = input$ort,     #'TurmstraBe 20, 10551',#
        simplify = TRUE,
        set_key("GOOGLE_KEY"))
    
    keeps2 <- c("geometry", "formatted_address", "place_id")
    Location_Clean = Places$results[keeps2]
    Location_Clean_2 <- Location_Clean %>% 
      unnest(geometry) %>% 
      unnest(location) %>%
      subset(select = c("lat", "lng")) 
    
    return(Location_Clean_2)
    
  })

  
  set_key( "GOOGLE_KEY" )
  mb_access_token("MAPBOX_TOKEN", install = TRUE)
  readRenviron("~/.Renviron")


  map <- reactiveValues(dat = 0)
  
  output$mymap <- renderLeaflet({
    
    map$dat <-leaflet(Ort_geocode()) %>%
      setView(Ort_geocode()$lng, Ort_geocode()$lat, zoom = 12) %>%
      addMapboxTiles(style_id = "xyz",
                     username = "xyz") %>%
      addMarkers(lat= Ort_geocode()$lat, lng= Ort_geocode()$lng, group = "Standort") %>%
      addLayersControl(
        overlayGroups = c("Standort"),
        options = layersControlOptions(collapsed = TRUE))
    
  })
}
    
shinyApp (ui = dashboard , server = db_server)

内容的提问来源于stack exchange,提问作者Chalente

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:25:35