Quarto book 不能发布到 bookdown.org 了吗?
- 已编辑
nan.xiao 佩服记忆力。
下面假定有本叫 data-analysis-in-action 的书要部署到 bookdown.org 上。
需要将
rsconnect::addServer(url = "https://bookdown.org/", name = "bookdown.org")
rsconnect::connectApiUser(
account = "xiangyun", server = "bookdown.org",
apiKey = Sys.getenv("CONNECT_API_KEY")
)
quarto::quarto_publish_site(
name = "data-analysis-in-action", render = "none",
server = "bookdown.org", account = "xiangyun",
title = "Data Analysis in Action"
)
更改为
# 更神奇的地方就是在这个地方不能加 __api__/
rsconnect::addServer(url = "https://bookdown.org/", name = "bookdown.org")
# connectApiUser 会自动在 bookdown.org 之后加 __api__/
rsconnect::connectApiUser(
account = "xiangyun", server = "bookdown.org",
apiKey = Sys.getenv("CONNECT_API_KEY")
)
# 神奇的地方就是在这个地方修改 url
rsconnect::addServer(url = "https://bookdown.org/__api__/", name = "bookdown.org")
# quarto_publish_site 不会在 https://bookdown.org/ 之后加 __api__/ 所以要修改
quarto::quarto_publish_site(
name = "data-analysis-in-action", render = "none",
server = "bookdown.org", account = "xiangyun",
title = "Data Analysis in Action"
)
就又可以用了。
- 已编辑
nan.xiao 找到了一个用 rsconnect 替换 quarto 包部署的办法,只需替换最后那段调 quarto 包的代码
rsconnect::deployApp(
appDir = "_book",
appId = Sys.getenv("CONTENT_ID"),
contentCategory = "site",
appName = "data-analysis-in-action",
appTitle = "Data Analysis in Action",
server = "bookdown.org", account = "xiangyun",
forceUpdate = TRUE
)
rsconnect 1.0.0 发布后,不再需要下面这一行
rsconnect::addServer(url = "https://bookdown.org/__api__/", name = "bookdown.org")
- 已编辑
rsconnect 1.0.0 发布后,可以用 deploySite 来部署。
rsconnect::deploySite(
siteName = "data-analysis-in-action",
siteTitle = "Data Analysis in Action",
server = "bookdown.org", account = "xiangyun",
render = "none"
)
可见上面的问题很可能早就注意到了,并已经在开发版中解决。
rsconnect 1.0.0 已经发布了。
- 已编辑
如果你的 bookdown 项目没有很特殊的依赖,与其手动本地编译部署,在长期看不如使用 Git-backed content 功能 让 Connect 自动探测内容更新再编译刷新。
唯一需要的额外一步就是需要在 Git repo 中使用 rsconnect::writeManifest()
创建 manifest.json
。这样所有的依赖版本就被固定了,类似于 renv.lock
。只有在更新内容涉及更新依赖时需要重新生成这个文件。
可能是依赖比较多,比较复杂,没成功,懒得折腾了。
我是用 Docker 镜像打包了所有的依赖,然后用 Github Action 来测试的,本地也可以用这个镜像编译。最近,我发现用 Quarto 从命令行手动部署 Netlify 非常方便,GHA 每次编译成功后,推送到 Netlify 部署,也非常好。 避免了一旦 Git Push,Netlify 就开始自动部署的问题。因为,我想要只有当编译成功后,才开始部署的效果。
Cloud2016 理解,这种情况还是用一种支持自定义容器的方式在仓库一侧编译比较合适。
也可以考虑 GitHub Actions 编译发布到一个分支,然后在 Connect 中选择导入那个分支。直接是一堆 HTML 静态文件的话,manifest.json
可能需要这样生成:
rsconnect::writeManifest(
appPrimaryDoc = "index.html",
contentCategory = "site"
)
总之,选择适合自己的方案就好。前面我提出这个选项的初衷,是为了避免在本地或仓库侧通过 Connect API 推送的方式来布署,因为要自动化就会涉及到 credentials 管理的问题,换成使用 Connect 拉取的方式就避免了这类问题。