如何将环境变量传递给shinyapps

Rei*_*ica 22 r shiny

我想将安全参数传递给shinyapps.io部署,以便我的应用程序可以通过以下方式获取它们:

Sys.getenv('PASSWORD_X')

我deployApp在rsconnect包中找不到任何功能.

Tec*_*e01 13

您可以使用Renviron.site或.Renviron将私有数据存储和访问闪亮的应用程序.(请参阅此处了解Hadley Wickham的建议和说明 - 参见下面的示例).


解:

存储API身份验证密钥/令牌(归因:Hadley Wickham)

如果您的程序包支持基于API密钥或令牌的身份验证工作流,请鼓励用户将其存储在环境变量中.我们使用github R包来说明这一点,它包装了Github v3 API.将此模板定制到您的API +包并包含在README.md或插图中.

  1. 在GitHub个人设置的个人访问令牌区域中创建个人访问令牌.将令牌复制到剪贴板.
  2. 确定您的主目录.不确定?在R控制台中输入normalizePath("〜/").
  3. 创建一个新的文本文件.如果在RStudio中,请执行文件>新建文件>文本文件.
  4. 创建一个这样的行:

    GITHUB_PAT = blahblahblahblahblahblah

名称会GITHUB_PAT提醒您这是哪个API,并且blahblahblahblahblahblah是从剪贴板粘贴的个人访问令牌.

  1. 确保文件中的最后一行是空的(如果不是R将无声地加载文件.如果您使用的是显示行号的编辑器,则应该有两行,其中第二行为空.

  2. 使用文件名.Renviron保存在主目录中.如果被质疑,是的,你确实想要使用以点开头的文件名.

    • 请注意,默认情况下,dotfiles通常是隐藏的.但在RStudio中,文件浏览器将使.Renviron可见,因此将来很容易编辑.
  3. 重新启动R. .Renviron仅在R会话开始时处理.

  4. 使用Sys.getenv()访问您的令牌.例如,以下是如何将GITHUB_PAT与github包一起使用:

    library(github)
    ctx <- create.github.context(access_token = Sys.getenv("GITHUB_PAT"))
    # ... proceed to use other package functions to open issues, etc.
    
    Run Code Online (Sandbox Code Playgroud)

FAQ:为什么要通过.Renviron而不是.bash_profile或.bashrc来定义这个环境变量?

因为有很多OS的组合和运行R的方式,其中.Renviron方法"正常工作"而bash的东西没有.当R是Emacs或RStudio的子进程时,你不能总是指望传递给R的环境变量.将它们放在一个特定于R的启动文件中并为自己省去一些悲伤.

  • 在我的Shiny应用程序的根目录中创建了.Renviron文件的副本后,这对我有用. (3认同)
  • 从安全角度来看,将“.Renviron”中的API密钥部署到shinyapps.io是否安全? (2认同)