问题描述
在调试闪亮的应用程序时,我注意到相同的源代码在本地(macOS Catalina 10.15.6)和在服务器(Ubuntu 18.04.5 LTS)上产生的sessionInfo()
略有不同。
我从应用程序中删除了所有内容,仅保留了程序包的加载:
packages <- c("shiny","shinythemes","shinycssloaders","tidyverse","ggthemes","scales","feather","sf","leaflet","leaflet.extras","RColorBrewer")
lapply(packages,require,character.only = TRUE)
然后在本地和服务器上打印sessionInfo()
。虽然两台机器共享相同的源代码,并且R和所有软件包的版本相同,但sessionInfo()
的结果却不同。
仔细观察(以下输出),您可能会注意到“通过命名空间加载(但未附加)的软件包”列表有所不同,因为服务器未加载:
不确定这些差异是否会很容易造成问题,因为必须使用packagename::
在“已加载但未附加”包中访问对象。
尽管如此,令我惊讶的是看到这些差异并想知道是什么原因导致这种行为,以及这是否正常。
本地输出sessionInfo()
:
输出sessionInfo()
服务器:
如果我加载最少数量的软件包(仅限Shiny),则存在以下差异:
- 服务器列出xtable,然后列出jsonlite,而在本地列出相反的方式;
- 服务器列出yaml和rsconnect,而在本地则没有。
本地输出sessionInfo()
:
输出sessionInfo()
服务器:
解决方法
‘rsconnect’是Shiny Server用于部署的软件包。这说明了为什么将其自动加载到为Shiny Server配置的R实例中。 1
看看它的dependencies,我们看到它导入了“ yaml”包。这解释了为什么还要加载此软件包。最后,它还导入了“ jsonlite”包。并且由于'rsconnect'在R启动时作为默认软件包加载,这解释了为什么其导入要比'shiny'软件包的加载更早地加载,因此,为什么sessionInfo
的软件包顺序在本地和本地都不同。服务器会话。
1 服务器上的options('defaultPackages')
的值应包含“ rsconnect”。