Ich versuche, meiner Jekyll-Site einen neuen Beitrag hinzuzufügen, kann ihn jedoch beim Ausführen nicht auf den generierten Seiten sehen jekyll serve
.
Was sind einige häufige Gründe dafür, dass ein Jekyll-Beitrag nicht generiert wird?
Ich versuche, meiner Jekyll-Site einen neuen Beitrag hinzuzufügen, kann ihn jedoch beim Ausführen nicht auf den generierten Seiten sehen jekyll serve
.
Was sind einige häufige Gründe dafür, dass ein Jekyll-Beitrag nicht generiert wird?
Antworten:
_posts
Verzeichnis gestellt.YEAR-MONTH-DAY-title.MARKUP
( Beachten Sie die MARKUP
Erweiterung , die normalerweise.md
oder ist.markdown
)future: true
in _config.yml
(Dokumentation)published: false
in ihrer vorderen Angelegenheit. Stellen Sie es auf eintrue
.:
Zeichen. Ersetzen Sie es durch:
. 3.8.3
(und wahrscheinlich in anderen 'aktuellen' Veröffentlichungen)..markdown
Erweiterung zum Dateinamen hinzuzufügen . Ich weiß das, weil ich gerade 5 Minuten meines Lebens damit verschwendet habe.
Sie können verwenden jekyll build --verbose
, um den Erstellungsprozess im Detail anzuzeigen.
Beispielausgabe:
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.
...
Aus dem Protokoll fand ich jeklly übersprungen, 2018-01-14-boot-android-on-charge.md
weil es ein zukünftiges Datum hat.
Ein möglicher Grund ist, dass die date
in der Titelseite angegebene Zeitzone keinen Zeitzonenversatz enthält. In diesem Fall wird standardmäßig UTC verwendet, nicht wie erwartet die Zeitzone des lokalen Computers. Ich habe eine Stunde damit verschwendet, bis UTC meine aktuelle lokale Zeitzone BST "eingeholt" hat.
Ich habe keine endgültige Antwort darauf gefunden, aber ich denke, das Datum in der Titelseite muss in UTC mit einem Zeitzonenversatz angegeben werden (der standardmäßig Null ist, wenn er weggelassen wird).
Dies date: 2018-05-03 12:34:27
gilt auch für UTC, unabhängig davon, wo auf der Welt Sie sich befinden, und unabhängig von der timezone
Einstellung in _config.yml
.
Achten Sie also darauf, Daten wie folgt anzugeben:
date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
scheint auch zu funktionieren. Beachten Sie den zusätzlichen Doppelpunkt.
Ich habe Rspec-Tests für mein Blog geschrieben, die diese Regeln ausdrücken:
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
Dies kann für andere von Nutzen sein, da ich aufgrund von Tippfehlern im Datum usw. viel Zeit verloren habe.
Diese Tests zusammen mit dem Rest der Rspec-Konfiguration können hier im Kontext gesehen werden .
Um noch einen weiteren Grund hinzuzufügen: Wenn Sie einen Artikel von _drafts
nach verschieben _post
, müssen Sie manchmal den löschen, _site
damit der Artikel neu generiert werden kann.
In meinem Fall kommt es häufig vor, dass diese vor der _site
Neuerstellung nicht vollständig gelöscht werden, sodass der neue Artikel nicht angezeigt wird.
Sowieso rm -rf _site
und bundle exec jekyll serve
funktioniert :)
Wenn Sie die Datei nicht verfolgen können --verbose
und die Datei stillschweigend ignoriert wird, versuchen Sie, sie collections_dir
in der config.yml
Datei zu entfernen . Das hat das Problem für mich gelöst.
Wenn Sie Ihre vordere Angelegenheit überprüft haben und alles in Ordnung zu sein scheint und sogar jekyll build --verbose
nichts preisgibt (in meinem Fall hat es sich nur so verhalten, als ob die Datei überhaupt nicht vorhanden wäre, und sie nicht einmal als ausgeschlossen aufgeführt), überprüfen Sie die Codierung Ihrer Datei. Anscheinend muss es UTF-8
ohne Unterschrift sein. Wenn es so ist UTF-8 BOM
(oder UTF-8 with Signature
wie es einige Texteditoren nennen), wird es stillschweigend ignoriert. Um die Sache noch schlimmer zu machen, zeigen einige Editoren beide Typen als gerecht an UTF-8
, wodurch der Unterschied noch schwerer zu erkennen ist.
future:true
ohne Leerzeichen nach:
in_config,yml
führt zu ERR: Konfigurationsdatei: (UNGÜLTIG).future: true
die meisten werden stattdessen verwendet.