J'essaie d'ajouter un nouveau message à mon site Jekyll, mais je ne le vois pas sur les pages générées lorsque je cours jekyll serve
.
Quelles sont les raisons courantes pour lesquelles un message Jekyll n'est pas généré?
J'essaie d'ajouter un nouveau message à mon site Jekyll, mais je ne le vois pas sur les pages générées lorsque je cours jekyll serve
.
Quelles sont les raisons courantes pour lesquelles un message Jekyll n'est pas généré?
Réponses:
_posts
répertoire.YEAR-MONTH-DAY-title.MARKUP
( notez l' MARKUP
extension , qui est généralement.md
ou.markdown
)future: true
dans _config.yml
(documentation)published: false
dans son devanture. Réglez-le surtrue
.:
caractère. Remplacez-le par:
. 3.8.3
(et probablement dans d'autres versions «récentes»)..markdown
extension au nom de fichier. Je le sais parce que je viens de perdre 5 minutes de ma vie à cause de ça.
Vous pouvez utiliser jekyll build --verbose
pour afficher le processus de construction en détail.
Sortie d'exemple:
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.
...
du journal que j'ai trouvé jeklly ignoré 2018-01-14-boot-android-on-charge.md
car il a une date future.
Une raison possible est que le date
spécifié dans les pages préliminaires ne contient pas de décalage de fuseau horaire, auquel cas il défini par défaut sur UTC, et non sur le fuseau horaire de l'ordinateur local comme vous pouvez vous y attendre. J'ai perdu une heure là-dessus jusqu'à ce que UTC "rattrape" mon fuseau horaire local actuel, BST.
Je n'ai pas trouvé de réponse définitive à cela, mais je pense que la date dans l'avant-propos doit être donnée en UTC avec un décalage de fuseau horaire (qui par défaut à zéro si omis).
Il en date: 2018-05-03 12:34:27
est de même en UTC quel que soit l'endroit où vous vous trouvez dans le monde et quel que soit le timezone
contexte _config.yml
.
Veillez donc à spécifier les datetimes comme ceci:
date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
semble également fonctionner. Notez les deux points supplémentaires.
J'ai écrit des tests Rspec pour mon blog qui expriment ces règles:
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
Cela peut être utile pour d'autres car je perdais beaucoup de temps à cause de fautes de frappe dans la date, etc.
Ces tests ainsi que le reste de la configuration Rspec peuvent être vus en contexte ici .
Pour ajouter une raison de plus, lorsque vous déplacez un article de _drafts
vers _post
, vous devez parfois supprimer le_site
pour que l'article soit régénéré.
Dans mon cas, il arrive souvent que _site
cela ne soit pas entièrement supprimé avant la régénération, de sorte que le nouvel article n'apparaîtra pas.
Quoi qu'il en soit rm -rf _site
et bundle exec jekyll serve
fonctionne :)
Si vous ne parvenez pas à suivre le fichier --verbose
et si le fichier est ignoré en silence, essayez de supprimer collections_dir
le config.yml
fichier. Cela a résolu le problème pour moi.
Si vous avez vérifié votre introduction, et que tout semble bien, et même jekyll build --verbose
ne révèle rien (dans mon cas, cela a simplement agi comme si le fichier n'existait pas du tout, ne le listant même pas comme exclu), vérifiez l'encodage de votre dossier. Apparemment, il doit être UTF-8
sans signature. C'est UTF-8 BOM
(ou UTF-8 with Signature
comme l'appellent certains éditeurs de texte), alors il sera ignoré en silence. Pour aggraver les choses, certains éditeurs afficheront les deux types comme justes UTF-8
, ce qui rendra la différence encore plus difficile à repérer.
future:true
sans espace après:
dans_config,yml
conduit à ERR: Fichier de configuration: (INVALID).future: true
la plupart seront utilisés à la place.