Sto provando ad aggiungere un nuovo post al mio sito Jekyll, ma non riesco a vederlo nelle pagine generate quando corro jekyll serve
.
Quali sono alcuni motivi comuni per cui un post Jekyll non viene generato?
Sto provando ad aggiungere un nuovo post al mio sito Jekyll, ma non riesco a vederlo nelle pagine generate quando corro jekyll serve
.
Quali sono alcuni motivi comuni per cui un post Jekyll non viene generato?
Risposte:
_posts
directory.YEAR-MONTH-DAY-title.MARKUP
( nota l' MARKUP
estensione , che di solito è.md
o.markdown
)future: true
in _config.yml
(documentazione)published: false
in primo piano. Impostalo sutrue
.:
carattere. Sostituiscilo con:
. 3.8.3
(e probabilmente in altre versioni "recenti")..markdown
estensione al nome del file. Lo so perché per questo ho perso solo 5 minuti della mia vita.
È possibile utilizzare jekyll build --verbose
per visualizzare il processo di compilazione in dettaglio.
Output di esempio:
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.
...
dal log ho trovato jeklly saltato 2018-01-14-boot-android-on-charge.md
perchè ha una data futura.
Una possibile ragione è che la parte date
specificata nel frontespizio non contiene uno scostamento del fuso orario, nel qual caso il valore predefinito è UTC, non il fuso orario della macchina locale come ci si potrebbe aspettare. Ho sprecato un'ora su questo fino a quando UTC "ha raggiunto" il mio fuso orario locale, BST.
Non ho trovato una risposta definitiva a questo, ma penso che la data in primo piano debba essere data in UTC con un offset di fuso orario (che viene impostato a zero se omesso).
Quindi date: 2018-05-03 12:34:27
è in UTC indipendentemente da dove ti trovi nel mondo e indipendentemente timezone
dall'impostazione _config.yml
.
Quindi fai attenzione a specificare i datetimes in questo modo:
date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
sembra funzionare. Nota i due punti aggiuntivi.
Oppure può essere anche la cache del browser se non stai cercando nella cartella _site ma direttamente nella pagina principale del blog con l'elenco dei post.
Ho scritto test Rspec per il mio blog che esprimono queste regole:
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
Questo potrebbe essere utile ad altri perché stavo perdendo molto tempo a causa di errori di battitura nella data, ecc.
Questi test insieme al resto della configurazione Rspec possono essere visti nel contesto qui .
Giusto per aggiungere un motivo in più, quando sposti un articolo da _drafts
a _post
, a volte devi eliminare il _site
per l'articolo da rigenerare.
Nel mio caso capita spesso che _site
non venga completamente cancellato prima della rigenerazione quindi il nuovo articolo non verrà visualizzato.
Comunque rm -rf _site
e bundle exec jekyll serve
funziona :)
Se non riesci a tenere traccia del file --verbose
e se il file viene ignorato silenziosamente, prova a rimuoverlo collections_dir
dal config.yml
file. Questo ha risolto il problema per me.
Se hai controllato il tuo frontespizio, e tutto sembra a posto, e anche jekyll build --verbose
non rivela nulla (nel mio caso, si è comportato come se il file non esistesse affatto, nemmeno elencandolo come escluso), controlla la codifica del tuo file. A quanto pare, deve essere UTF-8
senza firma. È UTF-8 BOM
(o UTF-8 with Signature
come lo chiamano alcuni editor di testo), quindi verrà silenziosamente ignorato. A peggiorare le cose, alcuni editor visualizzeranno entrambi i tipi come giusti UTF-8
, rendendo la differenza ancora più difficile da individuare.
future:true
senza alcuno spazio dopo:
in_config,yml
porta a ERR: File di configurazione: (INVALID).future: true
la maggior parte può essere utilizzata invece.