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



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

我希望能做这样的事情:

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

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

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

我一直在使用的替代方案是R_CONFIG_ACTIVEenvvar。从https://docs.rstudio.com/connect/admin/process-management/using-the-config-package,

RStudio Connect启动的R进程默认设置R_CONFIG_ACTIVErsconnect

This This,可以用

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

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

如果您对RSC环境中设置的其他内容感到好奇,请参阅我的另一个快速应用程序的答案,该应用程序显示env-vars(以及其他)。

从v1.8.8(2021年4月)开始,RStudio Connect已经为所有内容运行时(源代码)定义了CONNECT_SERVER环境变量。

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

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

你可以在你的代码中这样使用:

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

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

最新更新