AWS EC2实例中RStudio Server可运行Shiny应用但Shiny Server加载失败
问题原因
RStudio Server运行应用时使用你登录的个人用户身份,而Shiny Server默认配置下以shiny系统用户运行应用,两者的运行环境、权限、R包搜索路径完全不同,这是此类问题的核心诱因。
排查与解决步骤
- R包路径不兼容问题
你在RStudio中安装的R包默认存放在当前用户家目录下的私有R库(例如~/R/x86_64-pc-linux-gnu-library/4.0/这类路径),shiny用户无权限读取该路径,也不会默认加载该路径下的R库。
解决方法二选一即可:- 修改
shiny-server.conf中的run_as参数,将run_as shiny;改为run_as 你登录RStudio使用的用户名;,改完重启Shiny Server服务生效 - 用sudo权限将应用依赖的所有包安装到系统级公共R库,执行命令:
sudo R -e "install.packages(c('依赖包1','依赖包2'), lib = .Library)"
- 修改
- 应用文件权限问题
存放在/srv/shiny-server/下的应用文件(包括app.R、ui.R、server.R以及关联的静态数据文件)需要确保运行应用的用户有对应读写权限。
解决方法:如果用默认的shiny用户运行,执行命令sudo chmod -R 755 /srv/shiny-server/你的应用目录;如果修改了run_as为个人用户,执行命令sudo chown -R 你的用户名:你的用户组 /srv/shiny-server/你的应用目录 - 硬编码路径问题
如果应用中写了硬编码的绝对路径,例如读取/home/你的用户名/data/xxx.csv这类个人家目录下的文件,shiny用户无权限访问对应路径会导致初始化失败。
解决方法:将应用内所有路径改为相对路径,所有用到的资源文件统一放到应用目录下管理。 - 查看应用具体报错
你当前提供的是Shiny Server全局日志,仅提示初始化失败,具体报错会单独存放在/var/log/shiny-server/目录下对应应用的日志文件中,查看对应日志可直接定位具体故障点。
内容的提问来源于stack exchange,提问作者Erin
相关产品推荐
相关产品推荐

