EC2实例上Shiny App连接Google Sheets认证失败问题
解决EC2上Shiny应用访问Google Sheets的认证问题
核心原因
Shiny应用运行时的工作目录、用户权限与SSH登录时的环境不一致,导致令牌文件无法被正确读取或访问。
解决方案
1. 使用绝对路径读取令牌文件
Shiny启动时的工作目录可能不是你SSH登录时的目录,替换相对路径为绝对路径:
# 替换为你myToken.rds的实际绝对路径,比如/home/ec2-user/myToken.rds myToken <- readRDS('/full/path/to/myToken.rds') gs4_auth(token = myToken)
2. 确保Shiny进程有权限读取令牌文件
如果使用Shiny Server,进程通常以shiny用户运行,需调整文件权限:
# 替换为令牌文件的绝对路径 sudo chown shiny:shiny /full/path/to/myToken.rds # 设置可读权限 chmod 644 /full/path/to/myToken.rds
3. 显式指定认证缓存目录(可选)
gargle默认缓存目录可能对Shiny进程不可写,可指定一个公开可访问的缓存目录:
myToken <- readRDS('/full/path/to/myToken.rds') # 指定/tmp下的缓存目录,确保Shiny有权限读写 gs4_auth(token = myToken, cache = "/tmp/gargle_cache")
4. 调试环境一致性
在app.R中添加调试代码,确认文件是否存在:
# 打印当前工作目录 cat("当前工作目录:", getwd(), "\n") # 检查令牌文件是否存在 token_path <- '/full/path/to/myToken.rds' cat("令牌文件是否存在:", file.exists(token_path), "\n") myToken <- readRDS(token_path) gs4_auth(token = myToken)
运行Shiny后查看日志,确认路径和文件访问状态。
内容的提问来源于stack exchange,提问作者Erik McDonald
相关产品推荐
相关产品推荐

