【问题标题】:Portable Browser Issues when deploying R Shiny App部署 R Shiny App 时的便携式浏览器问题
【发布时间】:2017-06-09 01:00:24
【问题描述】:

我构建了一个复杂的 Shiny 界面,该界面从内部联网的 ODBC 表中提取,并允许用户通过浏览器与数据进行交互。该公司在 Windows 7 Enterprise 上,IT 仅支持 IE 9。有些用户在他们的用户文件夹中安装了 chrome,有些用户安装了 firefox,有些使用 IE 9。我按照 R-Bloggers 的教程(这里:http://www.r-bloggers.com/deploying-desktop-apps-with-r/)和它使用从 PortableApps.com 下载的便携式 Chrome 浏览器在我的机器上运行。伟大的。不幸的是,该界面尚未在安装了自己的本地 Chrome 浏览器的任何其他人的机器上启动。

按照教程,我使用以下 vb 脚本:

Rexe           = "R-Portable\App\R-Portable\bin\Rscript.exe"
Ropts          = "--no-save --no-environ --no-init-file --no-restore --no-Rconsole"
RScriptFile    = "runShinyApp.R"
Outfile        = "ShinyApp.log" 
strCommand     = Rexe & " " & Ropts & " " & RScriptFile & " 1> " & Outfile & " 2>&1"

intWindowStyle = 0     ' Hide the window and activate another window.'
bWaitOnReturn  = False ' continue running script after launching R   '

CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn

此脚本在我的 R 文件中调用以下代码:

message('library paths:\n', paste('... ', .libPaths(), sep='', collapse='\n'))
chrome.portable = file.path(getwd(),'GoogleChromePortable/App/Chrome-bin/chrome.exe')
launch.browser = function(appUrl, browser.path=chrome.portable) {
    message('Browser path: ', browser.path)
    shell(sprintf('"%s" --app=%s', browser.path, appUrl))
}
shiny::runApp('shiny', launch.browser=launch.browser)

它在我的电脑上运行得很好......我在本地安装了 chrome,但我调用的是便携式 Chrome 可执行文件。让我担心的是,这两个人正在共享偏好或其他东西,例如我注意到我安装的版本中的首选项文件中的哈希值,特别是:

  "chrome_url_overrides": {
     "bookmarks": [ "chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/main.html" ]
  },

...与便携式 Chrome 安装中的相同 json 条目匹配:

  "chrome_url_overrides": {
     "bookmarks": [ "chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/main.html" ]
  }

为什么这些长的随机字符串匹配?我是否因为想知道这一点而吠叫错误的树?如果它们是 Chrome 可执行文件的两个单独安装,我不知道为什么这些字符串匹配,其中一个应该完全独立于机器上的任何东西运行。

这是来自一台机器的一组错误:

.../Desktop/TestApp3/GoogleChromePortable/App/Chrome-bin/chrome.exe[9100:9408:0716/141934:ERROR:gpu_info_collector_win.cc(103)] Can't retrieve a valid WinSAT assessment.
[9100:9408:0716/141934:ERROR:component_loader.cc(138)] Failed to parse extension manifest.
[9100:1716:0716/141946:ERROR:get_updates_processor.cc(214)] PostClientToServerMessage() failed during GetUpdates

这是来自第二台机器的一组错误:

.../Documents/TestApp3/GoogleChromePortable/App/Chrome-bin/chrome.exe
[5220:3384:0714/142128:ERROR:component_loader.cc(138)] Failed to parse extension     manifest.
[5220:7600:0714/142130:ERROR:external_registry_loader_win.cc(136)] File C:\Program     Files\Coupons.com CouponBar\chrome\Coupons.com.crx for key     
Software\Google\Chrome\Extensions\cnpkmcjgpcihgfnkcjapiaabbbplkcmf does not exist or is not readable.
[5220:2120:0714/142140:ERROR:get_updates_processor.cc(214)] PostClientToServerMessage() failed during GetUpdates
[5220:3384:0714/142413:ERROR:CONSOLE(122)] "Could not find value for secondaryUser", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142413:ERROR:CONSOLE(122)] "[undefined] (secondaryUser) is not a boolean", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142425:ERROR:CONSOLE(122)] "Could not find value for secondaryUser", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142425:ERROR:CONSOLE(122)] "[undefined] (secondaryUser) is not a boolean", source: chrome://resources/js/load_time_data.js (122)
[5220:3384:0714/142442:ERROR:navigation_entry_screenshot_manager.cc(167)] Invalid entry with unique id: 12

Chrome 似乎在不同的计算机上做不同的事情,实际上并没有充当独立的浏览器......但可能通过注册表或其他一些“幕后活动”与安装在各自计算机上的浏览器进行交互沟通。也许,因为我在我的机器上安装了可移植可执行文件,我的一些本地扩展或首选项自动更新为可移植的首选项等,随后这会导致其他机器上的冲突??

我可以关闭 Chrome 的扩展程序或额外的功能,例如对更新程序的调用吗?对于这种“部署”目的,是否有更好的独立便携式浏览器可以很好地与 Shiny 配合使用?我可以解决这个问题还是这是一个失败的原因?这应该是显而易见的,但我还是要说:让非技术类型安装 R,然后 RStudio,然后确认他们的工作目录结构,然后通过脚本窗口调用 runApp() 命令,这绝对不经济...

【问题讨论】:

  • 我尝试使用路径“GoogleChromePortable/GoogleChromePortable.exe”而不是更长的路径。那我就没有你提到的这样的错误。但对我来说,这两个版本甚至都不能在我的电脑上运行(RStudio 内除外)
  • 我终于解决了:stackoverflow.com/a/31272180/1117932 我的主管还发现了可执行文件之间的区别:如果您更新 chrome 便携版,“GoogleChromePortable/Chrome/chrome.exe”会更新,其他可执行文件不是。

标签: windows r google-chrome portability shiny


【解决方案1】:

我从那些相同的文章开始,但开发了RInno 包来解决这个确切的问题,即当你想与非技术用户共享你的桌面 Shiny 应用程序时,他们不能被指望与所有这些人搞混细节。

开始:

install.packages("RInno")
require(RInno)
RInno::install_inno()

那么你只需要调用两个函数来创建一个安装框架:

create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()

这将创建一个安装向导,该向导可以像任何其他程序一样运行,但会将您的闪亮应用程序安装在 Windows 台式计算机上。如果您想为尚未安装 R 的同事添加 R,请将 include_R = TRUE 添加到 create_app:

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)

它默认包含闪亮、magrittr 和 jsonlite,所以如果您使用其他包,如 ggplot2 或 plotly,只需将它们添加到 pkgs 参数。您还可以将 GitHub 包包含到 remotes 参数中:

create_app(
    app_name = "myapp", 
    app_dir  = "path/to/myapp"
    pkgs     = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"),
    remotes  = c("talgalili/installr", "daattali/shinyjs"))

如果您对其他功能感兴趣,请查看FI Labs - RInno

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多