• R语言
  • 求助:同样环境下blogdown::serve_site()有时成功有时失败,求复现问题

问题是这样来的

我参考这篇文章帮我妹建个人博客,
下载了“CaiJimmy/hugo-theme-stack”这个主题,然后blogdown::serve_site()报错了,当时报的错是超时。诡异的是我换"yihui/hugo-ivy"这个主题,再blogdown::serve_site()就成功了。

后来求助了yihui,但他那边一切正常无法复现我的问题,并建议我先升级 blogdown 包,再升级 Hugo再试试。

给我妹建博客报错那天用得hugo版本是0.80,今天把hugo版本升级到0.81后再试,但情况更诡异了。

  1. 先下载了“CaiJimmy/hugo-theme-stack”这个主题,然后blogdown::serve_site()报错。
    test
  2. 然后在一个新的文件夹下下载了"yihui/hugo-lithium"这个主题,再blogdown::serve_site()虽然报错,但viewer窗格里还是出来内容了。
    test1
  3. 接着又在一个新文件夹下又下载了一次“CaiJimmy/hugo-theme-stack”这个主题,然后blogdown::serve_site()报错,但这次报的是超时那个错。
    test2
  4. 接下来是一通瞎碰乱试,新建文件夹下载主题"yihui/hugo-ivy",情况和2"yihui/hugo-lithium"一样,虽报错但viewer窗格有内容。
  5. 新建文件夹下载主题"wangchucheng/hugo-eureka"hugo官网随便找的,报的错和"yihui/hugo-lithium"一样,但viewer窗格里空无一物。
  6. 新建文件夹下载主题"nodejh/hugo-theme-cactus-plus",然后blogdown::serve_site()报错,报的错是themes文件夹是空的,由于我个人博客用得是这个主题,于是我就直接把我博客themes文件夹下内容整个复制粘贴过来。然后再blogdown::serve_site()情况就和2"yihui/hugo-lithium"一样,虽报错但viewer窗格有内容。
    test6

综上,我怀疑blogdown::serve_site()有时成功有时失败可能是主题的问题,或者墙的问题。

有没有墙内的小伙伴愿意试试下载“CaiJimmy/hugo-theme-stack”这个主题再blogdown::serve_site()看看会不会报错。

我电脑R的基本版本信息是
sessionInfo

    中国移动宽带下用 hugo 0.79.0 搭建成功。

    > blogdown:::serve_site()
    
    ==> Found hugo at "/home/xxxxx/.local/share/Hugo/0.79.0/hugo" and "/usr/local/bin/hugo". The former will be used. If you don't need both copies, you may delete/uninstall the latter with your system package manager such as apt or yum.
    
    Launching the server via the command:
      /home/xxxxx/.local/share/Hugo/0.79.0/hugo server --bind 127.0.0.1 -p 4321 --themesDir themes -t hugo-theme-stack -D -F --navigateToChanged
    Serving the directory . at http://localhost:4321
    Launched the hugo server in the background (process ID: 34081). To stop it, call blogdown::stop_server() or restart the R session.
    Rendering content/post/2020-12-01-r-rmarkdown/index.en.Rmd... Done.
    > sessionInfo()
    R version 4.0.3 (2020-10-10)
    Platform: x86_64-pc-linux-gnu (64-bit)
    Running under: Ubuntu 20.10
    
    Matrix products: default
    BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
    LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
    
    locale:
     [1] LC_CTYPE=en_US.UTF-8      
     [2] LC_NUMERIC=C              
     [3] LC_TIME=en_US.UTF-8       
     [4] LC_COLLATE=en_US.UTF-8    
     [5] LC_MONETARY=en_US.UTF-8   
     [6] LC_MESSAGES=en_US.UTF-8   
     [7] LC_PAPER=zh_CN.UTF-8      
     [8] LC_NAME=C                 
     [9] LC_ADDRESS=C              
    [10] LC_TELEPHONE=C            
    [11] LC_MEASUREMENT=en_US.UTF-8
    [12] LC_IDENTIFICATION=C       
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets 
    [6] methods   base     
    
    loaded via a namespace (and not attached):
     [1] Rcpp_1.0.6        bookdown_0.21    
     [3] ps_1.5.0          digest_0.6.27    
     [5] later_1.1.0.1     R6_2.5.0         
     [7] jsonlite_1.7.2    magrittr_2.0.1   
     [9] evaluate_0.14     blogdown_1.1.7   
    [11] stringi_1.5.3     rlang_0.4.10     
    [13] rstudioapi_0.13   promises_1.2.0.1 
    [15] rmarkdown_2.7     tools_4.0.3      
    [17] stringr_1.4.0     servr_0.21       
    [19] processx_3.4.5    httpuv_1.5.5     
    [21] xfun_0.21         yaml_2.2.1       
    [23] compiler_4.0.3    htmltools_0.5.1.1
    [25] knitr_1.31       

    install.png

    built.png

      CyrusYip ,谢谢你,看来真不是墙的问题,也不像是hugo版本的问题。
      然而我换到hugo0.79.0版本又试了下,下载“CaiJimmy/hugo-theme-stack”这个主题,再blogdown::serve_site()还是报错了,超时。
      test7

      我对比了一下CyrusYip小伙伴的R包版本信息,把rmarkdown和blogdown包都更新了,再试还是报错。然后根据错误直接把content\post\rich-content\index.md 这个文件给删了,然后再blogdown::serve_site()就成功了。
      test8

      而这个被删掉的文件中的内容是

      +++
      author = "Hugo Authors"
      title = "Rich Content"
      date = "2019-03-10"
      description = "A brief description of Hugo Shortcodes"
      tags = [
          "shortcodes",
          "privacy",
      ]
      +++
      
      Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugo-s-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
      <!--more-->
      ---
      
      ## YouTube Privacy Enhanced Shortcode
      
      {{< youtube ZJthWmvUzzc >}}
      
      <br>
      
      ---
      
      ## Twitter Simple Shortcode
      
      {{< twitter_simple 1085870671291310081 >}}
      
      <br>
      
      ---
      
      ## Vimeo Simple Shortcode
      
      {{< vimeo_simple 48912912 >}}

      接着又把之前报错过的"yihui/hugo-lithium"、"wangchucheng/hugo-eureka"主题分别再试一遍,没有报任何错。又从hugo官网随便找了个主题"h-enk/doks"来试,又报了一个新的错误,苍天啊。

      Error: Error building site: TOCSS: failed to transform "scss/app.scss" (text/x-scss): SCSS processing failed: file "stdin", line 2, col 1: File to import not found or unreadable: bootstrap/scss/functions.

      总结一下:

      1. 可以肯定不是墙的问题墙受委屈了,所有成功了没报错的都是在hugo 0.79.0下实现,可能也不是hugo版本的问题实在懒得拿hugo 0.81.0版本再去试了
      2. 我猜主要问题是我之前blogdown/rmarkdown这两个包没更新,但我从CRAN下载blogdown就只能下到1.1版本,现在的1.1.13是用"remotes::install_github('rstudio/blogdown')"来安装的好像是开发版,所以下一个像我一样的萌新如果从CRAN下载blogdown包的话还是可能会碰到上面的问题 这点也存疑,因为我没有在这两个包没更新之前把那个文件删掉再试
      3. 原来真得不是hugo官网的每一个主题都可以成功地blogdown::serve_site(),这些主题可能也有各自的问题。比如"CaiJimmy/hugo-theme-stack"这个主题的\content\post\rich-content\index.md这个文件我是看不出来撒问题,但就是文件存在就报错,删去就不报错了。

      yuanfan 问题 1 我不懂。

      问题 2 的原因应该是你的 R 包没有升级,导致 pkg_file_lua 函数找不到。

      问题 3 的原因是墙。那个主题的示例文件 content\post\rich-content\index.md 里包含一个抓取 Twitter 消息的例子。墙内抓不了。

      问题 4 与 2 雷同。升级 R 包。

      问题 5 不懂。

      问题 6 我无法重现,themes 文件夹是空的可能是访问 Github 临时性抽风,主题没有下载成功,但这个概率应该不大,因为要是下载不成功,blogdown 会报错的。

        问题 6 可能和墙有关系。我之前在墙内新建 blogdown 项目等了好几分钟都没弄好,也不知道是网速慢还是某些 GitHub 网址被墙了,每次都是用外网才搭建成功的。昨天帮你测试是我第一次在墙内成功搭建。

        另外,建议你把终端的内容以文字形式贴出来,这样对别人来说比较方便。参看:Screenshots Can Be Helpful, But Only Text Can Be Copied And ExecutedWe Cannot Be Friends If You Share Source Code As Screenshots

          yihui

          问题 1 我不懂。

          原来截图里那个问题我也复现不出来了,但我又一通乱试有了一些新的收获。
          1.我先把hugo版本从0.79.0改到0.81.0,然后又又又新建文件夹下载"CaiJimmy/hugo-theme-stack"这个主题,再blogdown::serve_site()又失败了,报错的内容还是超时及提示content\post\rich-content\index.md这个文件有问题,可以通过删掉这个文件解决。
          2.再把blogdown包从1.1.13版本卸载重装1.1版本,情况和上面一样。
          3.再再把rmarkdown包从2.7版本卸载重装2.3版本,报了新的错误,和原来 问题1 截图里面的报错似乎差异很大。但是有了前面的经验,仔细看了错误中提到的https://api.twitter.com和https://vimeo.com我都访不了,看来还是墙的原因。

          哈哈,新的收获有二,一是如果报的错是直接定位到文件的,那对新手真是很友好的,不然只提示我某某网址导致超时那确实一头雾水;二是,blogdown::serve_site()的报错内容好像有点“玄学”,虽然"CaiJimmy/hugo-theme-stack"这个主题总是报错,根本原因也都是因为文件中有网址访不了,但报错的具体内容出现了好几种。
          可想而知,一个好包,除了功能好用重要,关键时刻报出来“正确的错误”也很重要啊。

          CyrusYip
          谢谢你的建议。
          另外,"CaiJimmy/hugo-theme-stack"这个主题我每次试都会碰到因为有网址被墙了而报错的情况,但你竟然一次成功了,难道墙本身可能并不是完全密不透风么。

          为了不使我的文字太散乱,我把这三次瞎碰乱试的报错信息等一起放下面了。

          -----------1把hugo版本从0.79.0改到0.81.0---------------------------

          blogdown:::serve_site()
          Launching the server via the command:
          C:/Users/fanfan/AppData/Roaming/Hugo/0.81.0/hugo.exe server --bind 127.0.0.1 -p 4321 --themesDir themes -t hugo-theme-stack -D -F --navigateToChanged
          Error: Error building site: "D:\R\yiyiblog\test6\content\post\rich-content\index.md:1:1": timed out initializing value. You may have a circular loop in a shortcode, or your site may have resources that take longer to build than the timeout limit in your Hugo config file.

          sessionInfo()
          R version 4.0.3 (2020-10-10)
          Platform: x86_64-w64-mingw32/x64 (64-bit)
          Running under: Windows >= 8 x64 (build 9200)

          Matrix products: default

          locale:
          [1] LC_COLLATE=Chinese (Simplified)China.936 LC_CTYPE=Chinese (Simplified)China.936
          [3] LC_MONETARY=Chinese (Simplified)China.936 LC_NUMERIC=C
          [5] LC_TIME=Chinese (Simplified)
          China.936

          attached base packages:
          [1] stats graphics grDevices utils datasets methods base

          loaded via a namespace (and not attached):
          [1] Rcpp_1.0.6 bookdown_0.21 ps_1.5.0 digest_0.6.27 later_1.1.0.1
          [6] R6_2.5.0 jsonlite_1.7.2 magrittr_2.0.1 evaluate_0.14 blogdown_1.1.13
          [11] rlang_0.4.10 rstudioapi_0.13 promises_1.2.0.1 rmarkdown_2.7 tools_4.0.0
          [16] servr_0.21 processx_3.4.5 httpuv_1.5.5 xfun_0.21 yaml_2.2.1
          [21] compiler_4.0.0 htmltools_0.5.1.1 knitr_1.31 Matrix products: default

          -----------2再把blogdown包从1.1.13版本卸载重装1.1版本--------------------------------

          blogdown:::serve_site()
          Launching the server via the command:
          C:/Users/fanfan/AppData/Roaming/Hugo/0.81.0/hugo.exe server --bind 127.0.0.1 -p 4321 --themesDir themes -t hugo-theme-stack -D -F --navigateToChanged
          Error: Error building site: "D:\R\yiyiblog\test6\content\post\rich-content\index.md:1:1": timed out initializing value. You may have a circular loop in a shortcode, or your site may have resources that take longer to build than the timeout limit in your Hugo config file.

          sessionInfo()
          R version 4.0.3 (2020-10-10)
          Platform: x86_64-w64-mingw32/x64 (64-bit)
          Running under: Windows >= 8 x64 (build 9200)

          Matrix products:
          default

          locale:
          [1] LC_COLLATE=Chinese (Simplified)China.936 LC_CTYPE=Chinese (Simplified)China.936
          [3] LC_MONETARY=Chinese (Simplified)China.936 LC_NUMERIC=C
          [5] LC_TIME=Chinese (Simplified)
          China.936

          attached base packages:
          [1] stats graphics grDevices utils datasets methods base

          loaded via a namespace (and not attached):
          [1] Rcpp_1.0.6 bookdown_0.21 ps_1.5.0 digest_0.6.27 later_1.1.0.1
          [6] R6_2.5.0 jsonlite_1.7.2 magrittr_2.0.1 evaluate_0.14 blogdown_1.1
          [11] rlang_0.4.10 rstudioapi_0.13 promises_1.2.0.1 rmarkdown_2.7 tools_4.0.0
          [16] servr_0.21 processx_3.4.5 httpuv_1.5.5 xfun_0.21 yaml_2.2.1
          [21] compiler_4.0.0 htmltools_0.5.1.1 knitr_1.31

          ------------3再再把rmarkdown包从2.7版本卸载重装2.3版本------------------------------------------------

          blogdown:::serve_site()
          Launching the server via the command:
          C:/Users/fanfan/AppData/Roaming/Hugo/0.81.0/hugo.exe server --bind 127.0.0.1 -p 4321 --themesDir themes -t hugo-theme-stack -D -F --navigateToChanged
          Error: Error building site: logged 2 error(s)

          blogdown::build_site()
          Start building sites 鈥?
          ERROR 2021/02/21 14:51:00 Failed to get JSON resource "https://api.twitter.com/1/statuses/oembed.json?id=1085870671291310081&omit_script=true": Get "https://api.twitter.com/1/statuses/oembed.json?id=1085870671291310081&omit_script=true": read tcp 192.168.1.4:60752->104.244.43.182:443: wsarecv: An existing connection was forcibly closed by the remote host.
          If you feel that this should not be logged as an ERROR, you can ignore it by adding this to your site config:
          ignoreErrors = ["error-remote-getjson"]
          ERROR 2021/02/21 14:51:01 Failed to get JSON resource "https://vimeo.com/api/oembed.json?url=https://vimeo.com/48912912": Get "https://vimeo.com/api/oembed.json?url=https://vimeo.com/48912912": read tcp 192.168.1.4:60756->128.242.240.155:443: wsarecv: An existing connection was forcibly closed by the remote host.
          If you feel that this should not be logged as an ERROR, you can ignore it by adding this to your site config:
          ignoreErrors = ["error-remote-getjson"]
          Total in 6429 ms
          Error: Error building site: logged 2 error(s)

          sessionInfo()
          R version 4.0.3 (2020-10-10)
          Platform: x86_64-w64-mingw32/x64 (64-bit)
          Running under: Windows >= 8 x64 (build 9200)

          Matrix products: default

          locale:
          [1] LC_COLLATE=Chinese (Simplified)China.936 LC_CTYPE=Chinese (Simplified)China.936
          [3] LC_MONETARY=Chinese (Simplified)China.936 LC_NUMERIC=C
          [5] LC_TIME=Chinese (Simplified)
          China.936

          attached base packages:
          [1] stats graphics grDevices utils datasets methods base

          loaded via a namespace (and not attached):
          [1] Rcpp_1.0.6 bookdown_0.21 ps_1.5.0 digest_0.6.27 later_1.1.0.1
          [6] R6_2.5.0 jsonlite_1.7.2 magrittr_2.0.1 evaluate_0.14 blogdown_1.1
          [11] rlang_0.4.10 rstudioapi_0.13 promises_1.2.0.1 rmarkdown_2.3 tools_4.0.0
          [16] servr_0.21 processx_3.4.5 httpuv_1.5.5 xfun_0.21 yaml_2.2.1
          [21] compiler_4.0.0 htmltools_0.5.1.1 knitr_1.31

            yuanfan 一个好包,除了功能好用重要,关键时刻报出来“正确的错误”也很重要啊。

            这句话当然是软件开发的绝对真理,也是一大难点。

            在这个具体的例子中,由于这个错误不在 blogdown 的掌控中,所以很难指明错误的来源;不是不可能,只是有点曲折。你可以试试按照错误消息的提示在 config.yaml 配置文件中加入:

            ignoreErrors: ["error-remote-getjson"]

            这样 Hugo 就不会报错了;当然,推特消息也不会显示。

            如果你安装开发版本的 blogdown,我会自动添加以上配置,所以应该不会再报错了。

              yihui
              谢谢你。
              我按照你说的安装了blogdown_1.1.14版本,然后两种方式都试了,都正常地blogdown::serve_site()成功了。

              这是直接在config.yaml文件中最后面加入了" ignoreErrors: ["error-remote-getjson"] ",没报错。
              test1

              这是上面成功后,再把config.yaml文件还原,然后把Rstudio关了又重新打开粗暴重启,也没报错。
              test2