Я пытаюсь добавить новое сообщение на свой сайт Jekyll, но не вижу его на сгенерированных страницах при запуске jekyll serve
.
Каковы некоторые распространенные причины, по которым сообщение Jekyll не создается?
Я пытаюсь добавить новое сообщение на свой сайт Jekyll, но не вижу его на сгенерированных страницах при запуске jekyll serve
.
Каковы некоторые распространенные причины, по которым сообщение Jekyll не создается?
Ответы:
_posts
каталог.YEAR-MONTH-DAY-title.MARKUP
( обратите внимание на MARKUP
расширение , которое обычно.md
или.markdown
)future: true
в _config.yml
(документация)published: false
в своей обложке. Установите его наtrue
.:
символ. Замените его на:
. 3.8.3
(и, вероятно, в других «последних» выпусках)..markdown
расширение к имени файла. Я знаю это, потому что я только что потратил на это 5 минут своей жизни.
Вы можете использовать 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.
...
из журнала я обнаружил, что jeklly пропущен, 2018-01-14-boot-android-on-charge.md
потому что у него есть дата в будущем.
Одна из возможных причин заключается в том, что date
указанное во вступительной части не содержит смещения часового пояса, и в этом случае по умолчанию используется UTC, а не часовой пояс локального компьютера, как вы могли ожидать. Я потратил на это час, пока UTC не «догнало» мой текущий местный часовой пояс, BST.
Я не нашел окончательного ответа на этот вопрос, но я думаю, что дата во вступительной части должна быть указана в UTC со смещением часового пояса (которое по умолчанию равно нулю, если оно опущено).
Так date: 2018-05-03 12:34:27
и в UTC независимо от того, где вы находитесь, и независимо от timezone
настройки _config.yml
.
Так что будьте осторожны, чтобы указать такие даты:
date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
тоже вроде работает. Обратите внимание на дополнительное двоеточие.
Я написал для своего блога тесты 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 можно увидеть в контексте здесь .
Просто чтобы добавить еще одну причину, когда вы перемещаете статью из _drafts
в _post
, вам иногда нужно удалить, _site
чтобы статья была восстановлена.
В моем случае часто бывает, что _site
перед повторным созданием статьи не удаляются полностью, поэтому новая статья не появляется.
Все равно так rm -rf _site
и bundle exec jekyll serve
работает :)
Если вы не можете отследить файл --verbose
и если он игнорируется, попробуйте удалить его collections_dir
в config.yml
файле. Это решило проблему для меня.
Если вы проверили свое вступление, и все кажется хорошо, и даже jekyll build --verbose
ничего не показывает (в моем случае он просто действовал так, как будто файл вообще не существует, даже не перечисляя его как исключенный), проверьте кодировку вашего файла. Видимо, это должно быть UTF-8
без подписи. Если это так UTF-8 BOM
(или UTF-8 with Signature
как это называют некоторые текстовые редакторы), то оно будет игнорироваться. Что еще хуже, некоторые редакторы будут отображать оба типа как справедливые UTF-8
, что делает разницу еще труднее.
future:true
без пробела после:
in_config,yml
приводит к ERR: Файл конфигурации: (INVALID).future: true
вместо этого можно использовать большинство.