如何知道应用程序是 运行 在本地还是在服务器上? (R闪亮)

How to know if the app is running at local or on server? (R Shiny)

我在我的笔记本电脑上测试我的应用程序,然后将它部署到 shinyapps 服务器。 在部署之前,我需要删除设置路径的语句,例如

setwd('/Users/MrY/OneDrive/Data')

有没有办法让代码确定它是 运行 本地还是服务器上的,这样它就会像:

if (isLocal()) {
       setwd('/Users/MrY/OneDrive/Data')
}

一个简单的示例代码(如果 setwd 未被删除,它将在服务器上失败):

server.R

library(shiny)

setwd('/Users/Yuji/OneDrive/Data/TownState')  

data = 'data1.csv'  # to test, using an empty .csv file

shinyServer(function(input, output) {


}) 

ui.R

library(shiny)

shinyUI(pageWithSidebar(
    headerPanel("Click the button"),

    sidebarPanel(
        actionButton("goButton", "Go!")
    ),
    mainPanel(

    )
))

您可以检索主机名并进行查询。计算机应具有不同的主机名。

    library(R.utils)
    hname <- System$getHostname()

产量

           nodename 
"mikes-air-3.wisedom.local"

EDIT 2020:仍然没有官方方法可以做到这一点,但我会选择易慧的方法 is_local <- Sys.getenv('SHINY_PORT') == ""


我不知道这是否正确,但您可以使用 session$clientData$url_hostname 查看主机。当你在本地 运行 时,除非你专门更改主机,否则它将是 127.0.0.1,我猜在 shinyapps 上它会是 shinyapps.io 之类的东西。示例代码

runApp(shinyApp(
  ui = fluidPage(
  ),
  server = function(input, output, session) {
    observe({
      if (session$clientData$url_hostname == "127.0.0.1") {
        setwd(...)
      }
    })
  }
))

那种东西应该有用,但我不能保证它是否是最好的解决方案

在 Shiny 中执行此操作的标准方法是:Sys.getenv('SHINY_PORT')。你可以这样写:

is_local <- Sys.getenv('SHINY_PORT') == ""