r - 在上传到 shinyapps.io 的 Shiny 应用中打开 .rda 文件
问题描述
我正在努力实现以下目标:
- 将 Shiny 应用程序部署到 shinyapps.io
- 打开时,应用程序连接到 Sharepoint
- 下载并打开存储在那里的 .rda 文件。该文件包含专有数据,只有拥有相关凭据的人才能访问这些数据。
这使我可以将对应用程序的访问与对数据的访问分开(只有当您拥有相关凭据时,您才能获取数据文件 - .rda)。这也意味着向 shinyapps.io 服务器上传更精简的信息集。
这一切在 R-studio 中运行良好,因为下载操作将 .rda 粘贴到本地文件夹中,而加载操作将在那里序列化的对象带入环境。
一旦将应用程序部署到shinyapps.io,它就会失败(可以预见):我怀疑“下载”停止了任何意义。理想情况下,应该有一个“打开”操作打开 .rda,然后将相关对象带入环境。我真的找不到。
这是在 R-Studio 中工作的代码(我显然无法分享 Sharepoint 网站的确切细节),任何帮助找出正确的工作流程策略以便它可以在 shinyapps.io 上工作将非常感激。
library(Microsoft365R)
site <- get_sharepoint_site(site_id = "idOfTheSharepointSite")
docs <- site$get_drive()
docs$download_file("Stuff/DelSet.Rda", overwrite = T)
load("DelSet.Rda")
编辑
实际问题不是文件本身的管理(下面的评论应该解决这个问题)。这是 Shinyapps.io 中 Sharepoint 上的认证。这个准系统应用程序也失败了(在 R-studio 上按预期工作)。
library(shiny)
library(Microsoft365R)
site <- get_sharepoint_site(site_id = "IDofMySite")
docs <- site$get_drive()
ui <- fluidPage(h5("Hello world!"))
server <- function(input, output) {}
shinyApp(ui = ui, server = server)
解决方案
通常,当您调用 Microsoft365R 之类的函数时get_sharepoint_site()
,它们会使用内置应用程序注册 ID 进行身份验证,该 ID 假定代码在您的本地计算机上运行。当您的代码位于远程服务器上时,这将不起作用,例如 shinyapps.io。相反,您必须在 Azure 中注册您的应用程序,并在进行身份验证时使用生成的应用程序 ID。
该过程基本上是:
- 创建一个应用程序注册,其中包含有关您的站点的信息,包括重定向 URI(您的站点地址),以及允许使用它的人(您组织中的每个人或唯一的人)。您可以在 Azure 门户中或使用 CLI 执行此操作。
- 为应用注册授予使用 MS365 的必要权限。它们都是 Microsoft Graph 权限,并且范围具有基本 URI
https://graph.microsoft.com/*
。 - 在您的 Shiny UI 脚本中,使用所需的范围、您的租户和您的应用 ID 调用 build_authorization_uri
- 在服务器脚本中,调用 get_azure_token 并将 authcode 传递给它,如 AzureAuth Shiny 小插图中所示
- 在对 的调用中使用令牌
get_sharepoint_site
。
描述该过程并提供简单的 Shiny 应用程序框架的小插图草稿在这里:https ://github.com/Azure/Microsoft365R/blob/master/vignettes/shiny.Rmd
推荐阅读
- azureportal - Azure 成本管理访问之谜
- vue.js - 切换列表以根据选定的单选按钮显示
- tensorflow - 如何从视频数据集制作数据集(首先是tensorflow)
- c++ - 为什么我的控制台程序可以连接g29车轮,但无法读取车轮数据?
- android - 协程中的异步函数在 Android 上不起作用
- sql - SQL - 检查是否在另一个表中找到唯一值
- regex - 使用 Google RE2 Regexp for Data Studio 从 URL 中提取域名
- macos - 无法在 Mac 上的系统启动时运行 shell 脚本?
- tensorflow - 我应该使用哪种 TensorFlow 来预测某人是否会喜欢某个地方?
- jenkins - Jenkins 定期构建表达式“*/40 * * * *”未按预期工作