使用blogdown::new_site()在Shiny Server创建站点异常:本地正常,服务器找不到CSS
我之前帮不少开发者解决过Shiny Server部署blogdown站点的类似问题,你遇到的CSS等资源找不到的情况,大概率是路径权限或者资源加载配置的问题,咱们一步步来排查解决:
确认工作目录与站点路径
Shiny Server运行时的默认工作目录和你本地R环境不一样,直接运行blogdown::new_site()可能会把站点创建到shiny用户无权访问的目录里。先在Shiny Server的R会话里运行getwd()确认当前工作目录,之后用绝对路径创建站点,比如:blogdown::new_site(dir = "/var/shiny-server/my-blog")建议把站点放在Shiny Server默认的托管目录(比如
/var/shiny-server/)下,避免权限冲突。修正静态资源的权限
blogdown生成的CSS、JS、图片等静态资源,需要Shiny Server的运行用户(一般是shiny用户)拥有读取权限。创建站点后,在服务器终端运行以下命令递归修改目录权限:sudo chown -R shiny:shiny /var/shiny-server/my-blog这样能确保shiny用户可以访问所有站点文件。
调整blogdown的资源加载配置
部分blogdown主题会用相对路径加载资源,但Shiny Server的请求路由和本地预览不同,容易导致路径错误。你可以:- 打开站点根目录下的
config.toml(或config.yaml),设置baseurl = "/"(如果是根路径部署),或者根据Shiny Server的访问路径调整这个值; - 先运行
blogdown::build_site()静态生成所有页面,再让Shiny Server托管生成的public目录——静态构建后的资源路径更稳定,不容易出动态生成的路径问题。
- 打开站点根目录下的
配置Shiny Server指向正确的资源目录
如果是把blogdown站点作为Shiny应用部署,需要修改Shiny Server的配置文件(通常是/etc/shiny-server/shiny-server.conf),指定站点根目录为blogdown生成的public文件夹。比如:location /my-blog { site_dir /var/shiny-server/my-blog/public; log_dir /var/log/shiny-server; directory_index on; }修改完成后,重启Shiny Server生效:
sudo systemctl restart shiny-server
如果以上步骤还没解决问题,可以去/var/log/shiny-server/目录下查看日志文件,里面会记录具体的资源加载错误信息,能帮你更精准定位问题。
内容的提问来源于stack exchange,提问作者jyjek

