我已经将一些内容(用R语言编写)部署到RStudio Connect实例中。
我希望能做这样的事情:
if (isTRUE(is_connect)) {
print("Running on Connect")
} else {
print("Not running on Connect")
}
也就是说,我想让我的代码检测它是否从RStudio Connect运行,并根据其环境表现不同。
如何使用R代码检测它是否在RStudio Connect上运行?
我一直在使用的替代方案是R_CONFIG_ACTIVE
envvar。从https://docs.rstudio.com/connect/admin/process-management/using-the-config-package,
RStudio Connect启动的R进程默认设置
R_CONFIG_ACTIVE
为rsconnect
。
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
环境变量,但只要你不这样做,你就会没事…