【问题标题】:Shiny Server R sessions creates a tempdir() it doesn't have permission to accessShiny Server R 会话创建一个它没有访问权限的 tempdir()
【发布时间】:2020-08-11 15:51:32
【问题描述】:

我有一个 Shiny 应用程序,在本地和容器化时都可以按预期工作。该应用程序接收一些用户输入,查询数据库,并返回一个包含.pdf.xlsx 文件的.zip。由于某些原因,我将把它部署到运行 Shiny Server 的服务器上。运行应用程序时,我收到一个错误,指出处理 [filename].knit.md 是不可能的,因为“权限被拒绝:”

在深入了解为什么会出现这种情况后,我认为这是用户 shiny(在 shiny-server.conf 中运行应用程序)没有访问目录/文件的权限的功能。我遇到的麻烦是诊断此错误,因为临时目录和文件似乎不存在于本地目录结构中的任何位置。

server.R 中,我调用tempfile() 并将该临时文件用作output_filerender() 命令中的输入。我知道tempfile() 是每个会话临时目录的子目录,那么如何确保用户shiny 可以访问在应用运行期间创建的任何tempdir()

此外,我是否正确假设上图中的临时目录在应用程序出错时会自动删除?我在服务器的 /tmp 树中的任何地方都找不到该目录。

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

    tempdir()的文档中

    默认情况下,tmpdir 将是 tempdir() 给出的目录。这将是 R 会话启动时通过以下规则找到的每个会话临时目录的子目录。依次检查环境变量 TMPDIR、TMP 和 TEMP,并使用第一个找到的指向可写目录的变量:如果没有成功则使用“/tmp”。路径不应包含空格。请注意,在 R 会话中设置任何这些环境变量对 tempdir() 没有影响:每个会话的临时目录是在解释器启动之前创建的。

    所以

    mkdir mydir
    export TMPDIR=mydir
    Rscript -e "tempfile();tempdir();"
    
    

    [1] "mydir/RtmphR2Rkx/file19da392dac5546"
    [1] "mydir/RtmphR2Rkx"
    

    否则授予 /tmp 的权限

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      相关资源
      最近更新 更多