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

4

我有一些用R语言编写的内容部署在RStudio Connect实例上。

我希望能够做到以下操作:

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

换句话说,我希望我的代码能够检测出它是否正在运行于RStudio Connect环境中,并在不同的环境下表现出不同的行为。

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

2个回答

5

我一直在使用的另一种选择是R_CONFIG_ACTIVE环境变量。来源于https://docs.rstudio.com/connect/admin/process-management/#using-the-config-package

默认情况下,RStudio Connect启动的R进程将R_CONFIG_ACTIVE设置为rsconnect

通过这个方法,可以使用:

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

在这里不使用isTRUE是安全的,因为Sys.getenv始终会返回长度为1的字符串;如果未设置,则返回""(仍然是长度为1,只是为空)。 (如果你仍然喜欢使用isTRUE也可以使用。)
如果你想知道RSC环境中还设置了什么其他内容,请参见我的其他回答,其中有一个快速应用程序可显示环境变量(以及其他信息)。

谢谢,R_CONFIG_ACTIVE 正是我在寻找的! - jwalton

1
自 v1.8.8(2021年4月)起,RStudio Connect 已将 CONNECT_SERVER 环境变量定义给所有内容运行时(source)。
您可以使用此环境变量的存在来检测是否在 Connect 上运行:
is_connect = function() {
  Sys.getenv("CONNECT_SERVER") != ""
}

你可以在代码中这样使用它:
if (isTRUE(is_connect())) {
  print("Running on Connect")
} else {
  print("Not running on Connect")
}

当然,这个解决方案并不是完全万无一失的:没有阻止我在本地机器上定义一个CONNECT_SERVER环境变量,但只要您不这样做,就没问题了...

请注意,根据同一 NEWS 文档,"这可以通过 Applications.DefaultServerEnv 配置选项禁用。" - r2evans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接