我构建了一个复杂的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,但我打电话给Portable Chrome可执行文件。它让我担心这两个人正在共享prefs或者其他东西,例如我注意到我安装的版本中的Preferences文件中的哈希值,特别是:
"chrome_url_overrides": {
"bookmarks": [ "chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/main.html" ]
},
...匹配Portable 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()
命令,这在经济上是无效的。通过脚本窗口......
答案 0 :(得分: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)
默认包含shiny,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