Jekyll文章未生成

115

我试图为我的Jekyll网站添加一篇新文章,但是当我运行jekyll serve时,在生成的页面上看不到它。

Jekyll文章未被生成的常见原因有哪些?


1
在使用集合文件夹时,请将 _post 文件夹放置在您的集合目录中。https://github.com/jekyll/jekyll/issues/6702 - MethodMan
1
当您将配置中的 collections_dir. 更改为 my_col_folder 时,所有帖子也必须移至 my_col_folder/_posts 之下 https://jekyllrb.com/docs/configuration/default/ -> 这是一种奇怪的行为! - KargWare
10个回答

266
  • 文章没有放在_posts目录中。
  • 当你将配置文件中的collections_dir.(默认值)更改为my_col_folder时,所有的文章也必须移动到my_col_folder/_postsJekyll默认设置
  • 文章标题不正确。文章应该以年-月-日-title.MARKUP命名(注意MARKUP扩展名,通常是.md.markdown
  • 文章日期在未来。您可以通过在_config.yml中设置future: true来使文章可见(文档)
  • 文章的 published:false在其正文中。 将其设置为true
  • 标题包含冒号 : 字符。适用于Jekyll3.8.3(可能也适用于其他“最近”的版本)。

2
_config.yml 中使用 future:true 而不是在 : 后面加空格会导致错误:配置文件:(INVALID)。必须使用 future: true - yaitloutou
1
非常感谢!我刚刚搜索了30分钟,才明白我的帖子为什么没有显示出来,原来是有一个日期过滤器...(15分钟后它就会“神奇地”工作...)。添加了未来选项,一切都按预期工作。在我看来,true 应该是默认值。 - Matthias Kleine
和我一样的情况:将一个位于“_drafts”文件夹下的文章推广到“_posts”文件夹后,它就消失了。花了30分钟才明白:在“_drafts”文件夹中的页面标题不需要日期,在“_posts”文件夹中的页面则需要...谢谢! - BAD_SEED
1
我错过了什么。我的帖子标题中有一个冒号,这没问题吗?https://raw.githubusercontent.com/alexharv074/alexharv074.github.io/master/_posts/2016-05-08-setting-up-puppet-module-testing-from-scratch-part-i-puppet-syntax-puppet-lint-and-rspec-puppet.md 并且在这里看起来没问题?https://alexharv074.github.io - Alex Harvey
1
@AlexHarvey 感谢您的评论!看起来这个问题似乎已经不是问题了。我更新了我的答案。 - aronisstav
显示剩余3条评论

25

您可以使用 jekyll build --verbose 命令来查看构建过程的详细信息。

示例输出:

  Logging at level: debug
Configuration file: /home/fangxing/fffx.github.io/_config.yml
  Logging at level: debug
         Requiring: jekyll-archives
         Requiring: jekyll-livereload
         Requiring: kramdown
            Source: /home/fangxing/fffx.github.io
       Destination: /home/fangxing/fffx.github.io/_site
 Incremental build: enabled
      Generating... 
       EntryFilter: excluded /Gemfile
       EntryFilter: excluded /Gemfile.lock
           Reading: _posts/2018-01-14-new-post.md
           Reading: _posts/2014-01-01-example-content.md
           Reading: _posts/2014-01-02-introducing-lanyon.md
           Reading: _posts/2017-11-21-welcome-to-jekyll.markdown
           Reading: _posts/2018-01-14-boot-android-on-charge.md
           Reading: _posts/2013-12-31-whats-jekyll.md
          Skipping: _posts/2018-01-14-boot-android-on-charge.md has a future date
        Generating: Jekyll::Archives::Archives finished in 0.000122873 seconds.
        Generating: JekyllFeed::Generator finished in 0.000468846 seconds.
        ...

从日志中我发现Jekyll跳过了2018-01-14-boot-android-on-charge.md这个文件,因为它有一个未来日期。


9
可能的原因之一是前置数据中指定的date没有包含时区偏移量,默认为UTC,而不是您可能期望的本地机器的时区。我浪费了一个小时,直到UTC“追上”我的当前本地时区BST。
我还没有找到一个明确的答案,但我认为前置数据中的日期必须以UTC和时区偏移量(如果省略则默认为零)给出。
因此,date:2018-05-03 12:34:27无论您在世界的哪个地方,无论_config.yml中的timezone设置如何,都在UTC中。
因此,请小心像这样指定日期时间:
date: 2018-05-03 12:34:27 +0100

1
格式 date: 2018-05-03 12:34:27 +01:30 似乎也可以使用。请注意额外的冒号。 - YinglaiYang
浪费了10分钟才意识到这是问题所在。谢谢! - Sameen

2

如果您不是在_site文件夹中查看,而是直接在博客的主页面上查看帖子列表,则可能是浏览器缓存。


2

我已经为我的博客编写了Rspec测试,这些测试表达了以下规则:

require 'spec_helper'
require 'yaml'

# Documented at https://jekyllrb.com/news/2017/03/02/jekyll-3-4-1-released/
post_regex = %r!^(?:.+/)*(\d{2,4}-\d{1,2}-\d{1,2})-(.*)(\.[^.]+)$!

def date_in_front_matter(date)
  return date if date.is_a?(Date)
  return date.to_date if date.is_a?(Time)
  return Date.parse(date) if date.is_a?(String)
end

describe 'posts' do
  Dir.glob("_posts/*md").each do |file|
    basename = File.basename(file)

    context basename do
      front_matter = YAML.load(File.read(file).split(/---/)[1])

      it 'filename must match documented post regex' do
        expect(basename).to match post_regex
      end

      it 'date in file name same day as date in front matter' do
        date_in_file_name = Date.parse(post_regex.match(basename).captures[0])
        expect(date_in_front_matter(front_matter['date'])).to eq date_in_file_name
      end

      it 'title in front matter should not contain a colon' do
        expect(front_matter['title']).to_not match /:/
      end

      it 'front matter should not have published: false' do
        expect(front_matter['published']).to_not be false
      end
    end
  end
end

这可能对其他人有用,因为我由于日期等方面的拼写错误而浪费了很多时间。
这些测试以及其余的Rspec配置可以在此上下文中查看:这里

2
只是为了增加一个原因,当你将一篇文章从_drafts移动到_post时,有时需要删除_site以便重新生成文章。
在我的情况下,经常发生_site在重新生成之前没有完全删除,所以新文章不会出现。
无论如何,rm -rf _sitebundle exec jekyll serve都可以解决问题 :)

1
如果您无法在--verbose中跟踪文件,并且文件被静默忽略,则尝试在config.yml文件中删除collections_dir。这对我解决了问题。

0

如果你已经检查了前置内容,一切看起来都很好,甚至jekyll build --verbose也没有发现任何问题(在我的情况下,它只是表现得好像文件根本不存在,甚至不将其列为被排除的文件),那么请检查文件的编码。显然,它需要是没有签名的UTF-8。如果它是UTF-8 BOM(或者一些文本编辑器称之为带签名的 UTF-8),那么它将被静默忽略。更糟糕的是,一些编辑器会将两种类型都显示为UTF-8,使得区别更难以发现。


0
它也可能是因为增量构建是真的,请确保检查一下。

这并没有回答问题。一旦你拥有足够的声望,你就可以评论任何帖子;相反,提供不需要提问者澄清的答案。- 来自审核 - user12256545
你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

0

我的帖子也没有出现,错误是我在我的名字中使用了一个点,例如2017-10-18-test.2.md
这是不被接受的,你必须使用2017-10-18-test2.md


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接