Использование blogdown с действиями github — альтернатива serve_site

Есть ли способ воспроизвести поведение blogdown::serve_site(), когда он кэширует файлы (т. е. восстанавливает только недавно обновленные или измененные файлы), но без фактического локального предварительного просмотра?

Причина, по которой я спрашиваю, заключается в том, что я хотел бы автоматизировать этот процесс с помощью действий Github, и это, похоже, не работает при использовании serve_site.

Для справки, я использую Netlify для размещения и создания сайта. Общий смысл моего процесса заключается в том, что я запускаю сценарий для обновления файла данных, а затем касаюсь файла, прежде чем использовать serve_site для обновления только этого файла.

# touch the blog post that references this file
blogdown:::touch_file("path_to_file.Rmd")

# serve the site which re-renders just the touched post (not all posts)
blogdown::serve_site()

Затем я могу зафиксировать это, и Netlify обновит сайт. Это отлично работает на моей локальной машине, и это то, чем я занимаюсь некоторое время. Но я пытаюсь автоматизировать его с помощью Github Actions, чтобы он запускался каждый день.

Для этого я могу настроить следующее. Я скопировал это из этот вопрос

name: Get new data and rebuild site

on:
  schedule:
    - cron: "0 13 * * 1"
  push:
    branches:
      - master

jobs:
  scrape-and-commit:
    runs-on: macOS-latest
    steps:
      - uses: actions/checkout@v2
      - uses: r-lib/actions/setup-r@master
      - uses: r-lib/actions/setup-pandoc@v1
      - name: Install packages
        run: Rscript -e 'install.packages(c("tidyverse", "here", "blogdown"))'
      - name: Install Hugo
        run: Rscript -e 'blogdown::install_hugo(extended = TRUE, version = "0.66.0")'
      - name: Get data
        run: Rscript -e 'source(here::here("scripts", "weekly_data_process.R"), echo = TRUE)'
      - name: Build site
        run: Rscript -e 'blogdown::serve_site()'

Это работает нормально, пока не дойдет до части «сайт сборки», где он просто зависает, и я получаю следующую ошибку. Я предполагаю, что это связано с тем, что процесс на самом деле никогда не заканчивается, и поэтому просто истекает время ожидания.

Serving the directory /Users/runner/work/plussixoneblog/plussixoneblog at http://127.0.0.1:4321
##[error]The operation was canceled.

Я пробовал использовать blogdown::build_site() и blogdown::build_hugo(), но build_site перерисовывает каждую страницу, которая мне не нужна, а build_hugo не перерисовывает затронутый файл!

По сути, мне нужно воспроизвести механизм кэширования serve_site, чтобы он просто отображал файлы, в которых RMD новее, чем файл HTML, не пытаясь предварительно просмотреть его локально.

Для справки: неудачный запуск Github Action находится здесь


person jimmyday87    schedule 10.07.2020    source источник
comment
Извините, это не воспроизводится специально, есть несколько вещей, которые нужно настроить, чтобы получить репрекс. Я могу сделать это, если это поможет, но решил проверить, не сталкивался ли кто-нибудь с этим раньше.   -  person jimmyday87    schedule 10.07.2020
comment
Просто для протокола: это было опубликовано на github.com/rstudio/blogdown/issues/468. .   -  person Yihui Xie    schedule 19.08.2020
comment
@YihuiXie да, извините, я хотел обновить этот вопрос о переполнении стека! Я сделаю это в ближайшее время.   -  person jimmyday87    schedule 20.08.2020
comment
Не беспокойтесь вообще! Большое спасибо за обратную связь!   -  person Yihui Xie    schedule 20.08.2020


Ответы (1)


Мне удалось решить эту проблему, поэтому поделился ответом. Две вещи, которые я сделал, похоже, помогли здесь.

Первый - с помощью blogdown::build_site(local = TRUE). Локальная часть была тем, чего мне раньше не хватало.

Мне также нужно было добавить часть действия touch_file в команду запуска. Я не уверен, что это было действительно важно, но это был шаг, который, наконец, заставил весь этот процесс работать на меня, поэтому я собираюсь сказать «да».

Выписка ниже. В разделе «Установить пакеты» вам также необходимо добавить пакеты, которые используются в файлах, к которым вы прикасаетесь.

jobs:
  touch-and-rebuild:
    runs-on: macOS-latest
    steps:
      - uses: actions/checkout@v2
      - uses: r-lib/actions/setup-r@master
      - uses: r-lib/actions/setup-pandoc@v1
      - name: Install packages
        run: Rscript -e 'install.packages(c("here", "blogdown"))'
      - name: Install Hugo
        run: Rscript -e 'blogdown::install_hugo(extended = TRUE, version = "0.66.0")'
      - name: Build site
        run: |
          blogdown:::touch_file(here::here("path", "to", "file.Rmd"))
          blogdown:::build_site(TRUE)
        shell: Rscript {0} 

После этого вам понадобится код для фиксации

person jimmyday87    schedule 20.08.2020