从 RStudio Connect 检测 R 代码是否为 运行

Detect if R code is running from RStudio Connect

我有一些内容(用 R 语言编写)部署到 RStudio Connect 实例。

我希望能够做类似的事情:

if (isTRUE(is_connect)) {
  print("Running on Connect")
} else {
  print("Not running on Connect")
}

也就是说,我想让我的代码检测它是否来自 RStudio Connect 运行,并根据其环境表现不同。

如何使用 R 代码检测它是否在 RStudio Connect 上 运行?

自 v1.8.8(2021 年 4 月)起,RStudio Connect 已将 CONNECT_SERVER 环境变量定义为所有内容运行时 (source)。

您可以使用此环境变量的存在来检测您是否 运行 连接:

is_connect = function() {
  Sys.getenv("CONNECT_SERVER") != ""
}

然后您可以在您的代码中使用它:

if (isTRUE(is_connect())) {
  print("Running on Connect")
} else {
  print("Not running on Connect")
}

当然这个解决方案并不是万无一失的:没有什么可以阻止我在我的本地机器上定义一个 CONNECT_SERVER 环境变量,但是只要你不这样做你就会没事...

我一直在使用的替代方法是 R_CONFIG_ACTIVE envvar。来自 https://docs.rstudio.com/connect/admin/process-management/#using-the-config-package

By default, R processes launched by RStudio Connect set R_CONFIG_ACTIVE to rsconnect.

这个这个,有人可能会用到

if (Sys.getenv("R_CONFIG_ACTIVE") == "rsconnect") {
  print("Running on Connect")
} else {
  print("Not running on Connect")
}

这里不使用 isTRUE 是安全的,因为 Sys.getenv 总是 return 长度为 1 的字符串;如果未设置,它 returns "" (仍然是长度 1,只是空)。 (如果您仍然喜欢,可以使用 isTRUE。)

如果您对 RSC 环境中的其他设置感到好奇,请参阅我的 显示环境变量(以及其他)的快速应用程序。