yuanfan 为了避免这种怪事,编译网站的 hugo 命令行要加上 -F 参数,F 表示 future。Hugo 默认不编译两类页面,一类是草稿(YAML 数据中含有 draft: true 字段的文件),另一类就是日期在当前系统日期之后的文件。因为你的时区在美国时间之前,所以你的 5 月 3 日确实有大约半天对应美国的 5 月 2 日,于是这种日志默认不会编出来。加上 -F 参数就是告诉 Hugo,甭管日志的日期,通通给我编出来。

日期在未来的日志之所以默认不编出来,可能是为了对付那种八点二十发的情况。

    yihui
    明白了,谢谢益辉,难怪我每次写完博客评论上面的发送时间都是in the future。

    果然有人也碰到相同问题了,前几个月在这个诡异的问题上整整浪费了我一个晚上的时间……

      InfinityLoop 我发现你好像已经几次因为某个问题浪费一晚上时间了,而且这些问题都是 blogdown::check_site() 可以很快帮你指出来的,所以下次记住这个口号:https://bookdown.org/yihui/blogdown/a-quick-example.html#when-in-doubt-run-blogdowncheck_site

      blogdown::check_site() 会查找日期在未来的文章:https://github.com/rstudio/blogdown/blob/20a8258b39f5cbda7911cc8c0cdb35a4bb31aa52/R/check.R#L339-L352 不过在这个具体问题上,因为日期不带时区,所以 check_site() 也无法聪明到可以预知服务器上的时区,也检测不出来这种问题。

      我得想想怎么解决。你们平时怎样创建新的文章?如果用 RStudio 插件 New Post 的话,那还有希望在日期字段里自动加上时区;如果是手打日期的话,那这问题就几乎无望了。

        yihui 我都是用 New Post 创建文章的。

        能不能设置个默认时区呢?感觉每篇文章的日期都写时区不太简洁,一般人应该平时都在同一个时区生活吧。都是一样的东西,应该有个设置好点吧。


        我第一次知道文章写完就发布还有这种问题。我写完文章都要修订好几次,不会遇到这种问题。没空检查文章的时候,我能把文章屯一个月。我写文章的流程一般是这样的:

        1. 尽量一口气写完
        2. 过两三天再逐字修订
        3. 再过两三天再看,没问题就可以发布了

        刚写完的时候一般感觉不错,这时候检查效果不太好。把文章放着,过两三天再逐字地看,就会发现些问题,然后改正。我觉得迟一天发布也不是坏事。

        yihui

        谢谢! blogdown 可用选项太多了,帮助文档也非常丰富,估计有不少和我一样不看帮助文档直接开用,碰到问题才一个一个去查的人,所以对很多操作或者 trick 没有了解得非常透彻,就会导致一直在浪费时间


        我创建文章都是习惯手动复制老文章的设定来写的,因为有不少主题的自定义字段,所以复制粘贴对于我来说更便捷。

          11 天 后

          yihui 多谢分享,简化模板之后果然不用每次新建文章都删删删了。但有个问题,没填写的内容被包含进去了

          我的模板是这样的:

          ---
          title: "{{ replace .TranslationBaseName "-" " " | title }}"
          date: {{ .Date }}
          tags: []
          ---
          
          <!--more-->

          用 New Post 新建文章,什么都不填,直接点确定,会产生:

          ---
          title: ''
          author: ''
          date: '2021-05-17'
          slug: .zh-cn
          categories: []
          tags: []
          ---
          
          <!--more-->

          Screenshot_20210517_082800.png

          author、categories 都没填,但是还是出现在文章里了。要是不要包含进去就更好了,我觉得填了再包含会方便点。

            4 个月 后

            yuanfan 刚在 blogdown 里加了个时间选项。若你在 .Rprofile 中设置 options(blogdown.time = TRUE),那么用 RStudio 插件 New Post 创建日志时,日期字段里就会自动带上时间,形如 2001-02-03T04:05:06-0700。因为这里面带上了时区,所以日期就没有了模糊性;无论服务器上的时间在哪个时区,都可以准确解析这个日期。

            当然,你也可以手动在日期中添加上时间,北京时间的时区是 +0800

            最简单的办法还是我最早说的,在 hugo 命令行里添加 -F 选项,命令 hugo 编译任何日期的日志,不管它是不是未来的日期。

              yihui 哇嗷,谢谢。跑偏一下:朝露暮成霜,过去将会来。

                yuanfan 不客气。历届跑偏大赛中我有输过吗。没有。

                《观一个好不容易加上的时区与一则永远对不完的对联有感》

                朝露暮成霜,
                过去将会来。
                来联去入箱,
                夙愿今释怀。

                InfinityLoop 我也试花了两个晚上折腾,后来才发现是因为日期是未来日期,所以 hugo 默认不编译。 后来在 netlify.toml 里加上下面的一行就好了

                [context.production]
                  command = "hugo --buildFuture"
                10 个月 后

                前些天也踩了这个坑,发现 Hugo 本来就可以配置编译参数。在 Hugo 配置文件 config.toml 加上 buildFuture = true 就行了。

                1 年 后
                CyrusYip 更改标题为「blogdown 部署后帖子未出现在网站
                1 年 后