错误描述:
在服务器上面部署了R的shiny app之后,部分页面显示“cannot open the connection”,根据这个错误提示搜索了一下,发现绝大部分问题是由于工作路径设置不正确导致的,但是这应当不是shiny app会出现的错误,于是查看了日志文件
cd /var/log/shiny-server
详细的错误信息是这样的:
Warning in file(file, ifelse(append, "a", "w")) :
cannot open file 'DBA_tamoxifen_report.csv.csv': Permission denied
Warning: Error in file: cannot open the connection
149: file
148: utils::write.table
143: pv.DBAreport
142: dba.report
138: <reactive:dbareport_Annotation> [/srv/shiny-server/ATAC-DEA/server.R#1198]
122: dbareport_Annotation
121: <reactive:DE_Annotation> [/srv/shiny-server/ATAC-DEA/server.R#1214]
105: DE_Annotation
104: exprFunc [/srv/shiny-server/ATAC-DEA/server.R#1227]
103: widgetFunc
102: ::
htmlwidgets
shinyRenderWidget
101: func
88: renderFunc
87: renderFunc
83: renderFunc
82: output$dbareport_Annotation_Table
1: runApp
Warning: Error in file: cannot open the connection
117: <Anonymous>
Warning: Error in file: cannot open the connection
171: <Anonymous>
原来这一句 cannot open file 'DBA_tamoxifen_report.csv.csv': Permission denied 才是问题的关键,检查了应用里的相关代码,发现只要是出错的页面都需要读取这个文件,由于权限限制而导致无法读取所以出现错误。
之后进入到应用程序的目录对文件的权限情况进行查看:
root@root:/srv/shiny-server/ATAC-DEA# ls -l
total 228
-rw-r--r-- 1 root root 41797 Jan 10 09:20 DBA_tamoxifen_report.csv.csv
...
开头的一组信息表示权限情况,第一组是1个字符,表示类型;其他都是3个字符为一组,分别表示以下几种状态:可读权限(read)、可写权限(write)以及可执行权限(execute),三者分别对应的字符为r、w和x。而总共有三组,分别代表3类人的权限:文件所有者(user)、文件所有者所在组(group)以及其他(others)
- 第一组:第1个字符,‘-’代表这是一个文件,如果是'd'则代表这是一个目录
- 第二组:第2-4个字符,'rw-'代表文件所有者具有读写权限
- 第三组:第5-7个字符,'r--‘代表文件所有者所在组只有可读权限
- 第四组:第8-10个字符,’r--‘代表其他用户只有可读权限
所以只需要对文件的权限情况修改即可解决问题。
解决问题
使用chmod命令对文件权限情况进行修改,具体的命令形式可参考其他博客(Linux下更改文件权限)。