shinyapps.io无法读取.Renviron中的环境变量问题求助
shinyapps.io无法读取.Renviron中的环境变量问题求助
大家好,我最近碰到个头疼的问题,想请教下各位!
我自己做了一个R包,里面有个run_app()函数,内部会调用runApp()来启动Shiny应用,已经把这个包传到私有GitHub仓库了。包的目录结构大概是这样的:
project_name/ ├── project_name.Rproj ├── DESCRIPTION ├── NAMESPACE ├── .Renviron(隐藏文件) ├── 其他Git相关隐藏文件 └── R/ └── app.R
我的Shiny应用里用到了get_bucket这类需要AWS凭证的方法,本地运行的时候完全没问题,RStudio能自动读取.Renviron里的环境变量,一切都很顺畅。
但部署到shinyapps.io之后就出问题了:比如调用Sys.getenv("AWS_ACCESS_KEY_ID")返回的是空字符串,根本读不到我存在.Renviron里的变量。应用本身能正常部署,但那些依赖AWS凭证的功能全失效了,核心原因就是应用读不到.Renviron里的内容。
说下我的部署流程:我单独建了一个文件夹,里面放了另一个app.R文件,内容很简单:
library(repository_name) repository_name::run_app()
然后我会执行这段部署代码:
tmp.enc <- options()$encoding options(encoding = "UTF-8", rsconnect.packrat = TRUE) rsconnect::deployApp( appDir = "path/to/the/folder/containing/the/.R/file", appName = "app_adress", upload = TRUE, logLevel = "verbose", lint = TRUE, forceUpdate = TRUE )
我已经试过各种办法了,比如:
- 确保
.Renviron的最后一行是空行(听说这样能避免读取问题) - 切换到项目的工作目录再执行部署命令
- 在应用的server函数开头手动调用
readRenviron(".Renviron") - 尝试用
readRenviron("~/.Renviron")读取用户根目录下的配置 - 用
readRenviron(normalizePath('.Renviron'))来确保路径正确 - 每次部署前都确认
.Renviron确实在当前工作目录里
但这些方法都没用。我绝对不想把.Renviron提交到代码仓库里,太不安全了。我觉得肯定有办法让shinyapps.io在部署时识别我的环境变量,每次部署都手动用Sys.setenv()硬编码凭证也不是长久之计,理想状态是部署过程能自动读取我的.Renviron,但我肯定是哪里操作错了,实在找不到问题所在。
备注:内容来源于stack exchange,提问作者William Lima
相关产品推荐
相关产品推荐

