我试图为我的Jekyll网站添加一篇新文章,但是当我运行jekyll serve
时,在生成的页面上看不到它。
Jekyll文章未被生成的常见原因有哪些?
我试图为我的Jekyll网站添加一篇新文章,但是当我运行jekyll serve
时,在生成的页面上看不到它。
Jekyll文章未被生成的常见原因有哪些?
_posts
目录中。collections_dir
从.
(默认值)更改为my_col_folder
时,所有的文章也必须移动到my_col_folder/_posts
下Jekyll默认设置年-月-日-title.MARKUP
命名(注意MARKUP
扩展名,通常是.md
或.markdown
)_config.yml
中设置future: true
来使文章可见(文档)published:false
在其正文中。 将其设置为true
。:
字符。3.8.3
(可能也适用于其他“最近”的版本)。_config.yml
中使用 future:true
而不是在 :
后面加空格会导致错误:配置文件:(INVALID)。必须使用 future: true
。 - yaitloutou您可以使用 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
这个文件,因为它有一个未来日期。
date
没有包含时区偏移量,默认为UTC,而不是您可能期望的本地机器的时区。我浪费了一个小时,直到UTC“追上”我的当前本地时区BST。date:2018-05-03 12:34:27
无论您在世界的哪个地方,无论_config.yml
中的timezone
设置如何,都在UTC中。date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
似乎也可以使用。请注意额外的冒号。 - YinglaiYang如果您不是在_site文件夹中查看,而是直接在博客的主页面上查看帖子列表,则可能是浏览器缓存。
我已经为我的博客编写了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
_drafts
移动到_post
时,有时需要删除_site
以便重新生成文章。_site
在重新生成之前没有完全删除,所以新文章不会出现。rm -rf _site
和bundle exec jekyll serve
都可以解决问题 :)--verbose
中跟踪文件,并且文件被静默忽略,则尝试在config.yml
文件中删除collections_dir
。这对我解决了问题。如果你已经检查了前置内容,一切看起来都很好,甚至jekyll build --verbose
也没有发现任何问题(在我的情况下,它只是表现得好像文件根本不存在,甚至不将其列为被排除的文件),那么请检查文件的编码。显然,它需要是没有签名的UTF-8
。如果它是UTF-8 BOM
(或者一些文本编辑器称之为带签名的 UTF-8
),那么它将被静默忽略。更糟糕的是,一些编辑器会将两种类型都显示为UTF-8
,使得区别更难以发现。
我的帖子也没有出现,错误是我在我的名字中使用了一个点,例如2017-10-18-test.2.md
。
这是不被接受的,你必须使用2017-10-18-test2.md
。
collections_dir
从.
更改为my_col_folder
时,所有帖子也必须移至my_col_folder/_posts
之下 https://jekyllrb.com/docs/configuration/default/ -> 这是一种奇怪的行为! - KargWare