Próbuję dodać nowy post do mojej witryny Jekyll, ale nie widzę go na wygenerowanych stronach po uruchomieniu jekyll serve
.
Jakie są typowe powody, dla których post Jekyll nie jest generowany?
Próbuję dodać nowy post do mojej witryny Jekyll, ale nie widzę go na wygenerowanych stronach po uruchomieniu jekyll serve
.
Jakie są typowe powody, dla których post Jekyll nie jest generowany?
Odpowiedzi:
_posts
katalogu.YEAR-MONTH-DAY-title.MARKUP
( zwróć uwagę na MARKUP
rozszerzenie , którym jest zwykle.md
lub.markdown
)future: true
w _config.yml
(dokumentacja)published: false
w pierwszej kolejności. Ustaw totrue
.:
postać. Zastąp go:
. 3.8.3
(i prawdopodobnie w innych „ostatnich” wydaniach)..markdown
rozszerzenia do nazwy pliku. Wiem o tym, bo właśnie przez to zmarnowałem 5 minut swojego życia.
Możesz użyć, jekyll build --verbose
aby zobaczyć szczegółowo proces budowania.
Przykładowe wyjście:
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.
...
z dziennika znalazłem jeklly pominięte, 2018-01-14-boot-android-on-charge.md
ponieważ ma przyszłą datę.
Jednym z możliwych powodów jest to, że date
podana w pierwszej kwestii nie zawiera przesunięcia strefy czasowej, w takim przypadku domyślnie jest to UTC, a nie strefa czasowa komputera lokalnego, jak można się spodziewać. Poświęciłem na to godzinę, aż UTC „dogonił” moją aktualną lokalną strefę czasową, BST.
Nie znalazłem ostatecznej odpowiedzi na to pytanie, ale myślę, że data na pierwszej stronie musi być podana w UTC z przesunięciem strefy czasowej (która domyślnie wynosi zero, jeśli zostanie pominięta).
Tak samo date: 2018-05-03 12:34:27
jest w UTC niezależnie od tego, gdzie na świecie się znajdujesz i niezależnie od tego timezone
, w którym miejscu się znajdujesz _config.yml
.
Dlatego uważaj, aby określić daty w następujący sposób:
date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
Wydaje się, że format również działa. Zwróć uwagę na dodatkowy dwukropek.
Napisałem testy Rspec dla mojego bloga, które wyrażają następujące zasady:
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
Może to być przydatne dla innych, ponieważ traciłem dużo czasu z powodu literówek w dacie itp.
Te testy wraz z resztą konfiguracji Rspec można zobaczyć w kontekście tutaj .
Aby dodać jeszcze jeden powód, kiedy przenosisz artykuł z _drafts
do _post
, czasami musisz usunąć _site
artykuł do ponownego wygenerowania.
W moim przypadku często zdarza się, że _site
nie zostanie całkowicie usunięty przed ponownym wygenerowaniem, więc nowy artykuł się nie pojawi.
Zresztą rm -rf _site
i bundle exec jekyll serve
działa :)
Jeśli nie jesteś w stanie śledzić plik --verbose
i jeśli plik zostanie zignorowane następnie spróbuj usunąć collections_dir
w config.yml
pliku. To rozwiązało problem.
Jeśli sprawdziłeś swoją pierwszą sprawę i wszystko wydaje się być w porządku, a nawet jekyll build --verbose
nic nie ujawnia (w moim przypadku po prostu zachowywał się tak, jakby plik w ogóle nie istniał, nawet nie wymieniając go jako wykluczonego), sprawdź kodowanie Twojego pliku. Najwyraźniej musi być UTF-8
bez podpisu. Jeśli tak UTF-8 BOM
(lub UTF-8 with Signature
jak nazywają to niektóre edytory tekstu), zostanie po cichu zignorowane. Co gorsza, niektórzy redaktorzy wyświetlają oba typy jako sprawiedliwe UTF-8
, co sprawia, że różnica jest jeszcze trudniejsza do zauważenia.
future:true
bez spacji po:
in_config,yml
prowadzi do ERR: Plik konfiguracyjny: (INVALID).future: true
najczęściej używane.