Я намагаюся додати нову публікацію на свій сайт Jekyll, але не можу побачити її на створених сторінках під час запуску jekyll serve
.
Які основні причини не створювати публікацію Джекілла?
Я намагаюся додати нову публікацію на свій сайт Jekyll, але не можу побачити її на створених сторінках під час запуску jekyll serve
.
Які основні причини не створювати публікацію Джекілла?
Відповіді:
_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.
...
з журналу я виявив, що джеклі пропустили, 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
без пробілу після:
в_config,yml
призводить до ERR: файл конфігурації: (INVALID).future: true
більшість використовувати замість цього.