Estou tentando adicionar uma nova postagem ao meu site Jekyll, mas não consigo vê-la nas páginas geradas quando executo jekyll serve
.
Quais são alguns motivos comuns para uma postagem do Jekyll não ser gerada?
Estou tentando adicionar uma nova postagem ao meu site Jekyll, mas não consigo vê-la nas páginas geradas quando executo jekyll serve
.
Quais são alguns motivos comuns para uma postagem do Jekyll não ser gerada?
Respostas:
_posts
diretório.YEAR-MONTH-DAY-title.MARKUP
( observe a MARKUP
extensão , que geralmente é.md
ou.markdown
)future: true
em _config.yml
(documentação)published: false
na sua frente. Defina comotrue
.:
personagem. Substitua por:
. 3.8.3
(e provavelmente em outras versões 'recentes')..markdown
extensão ao nome do arquivo. Eu sei disso porque acabei de perder 5 minutos da minha vida por causa disso.
Você pode usar jekyll build --verbose
para visualizar o processo de construção em detalhes.
Saída de exemplo:
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.
...
do log, descobri que jeklly foi ignorado 2018-01-14-boot-android-on-charge.md
porque tem uma data futura.
Uma possível razão é que o date
especificado na questão inicial não contém uma diferença de fuso horário, caso em que o padrão é UTC, não o fuso horário da máquina local como você pode esperar. Perdi uma hora com isso até que o UTC "alcançou" meu fuso horário local atual, BST.
Não encontrei uma resposta definitiva para isso, mas acho que a data no primeiro assunto deve ser fornecida em UTC com um deslocamento de fuso horário (que o padrão é zero se omitido).
O mesmo date: 2018-05-03 12:34:27
ocorre no UTC, independentemente de onde você estiver no mundo e da timezone
configuração em que estiver _config.yml
.
Portanto, tenha cuidado para especificar os horários de dados como este:
date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
também parece funcionar. Observe os dois pontos adicionais.
Eu escrevi testes Rspec para meu blog que expressam estas regras:
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
Isso pode ser útil para outras pessoas, pois eu estava perdendo muito tempo devido a erros de digitação na data, etc.
Esses testes, juntamente com o resto da configuração Rspec, podem ser vistos no contexto aqui .
Só para adicionar mais um motivo, quando você move um artigo de _drafts
para _post
, às vezes é necessário excluir o _site
para que o artigo seja regenerado.
No meu caso, muitas vezes acontece que _site
não será totalmente excluído antes da regeneração, então o novo artigo não aparecerá.
Enfim rm -rf _site
e bundle exec jekyll serve
funciona :)
Se você é incapaz de acompanhar o arquivo em --verbose
e se o arquivo é ignorado em seguida, tente remover collections_dir
no config.yml
arquivo. Isso resolveu o problema para mim.
Se você checou seu assunto de frente e tudo parece bem, e nem mesmo jekyll build --verbose
revela nada (no meu caso, apenas agiu como se o arquivo não existisse, nem mesmo listando-o como excluído), verifique a codificação do seu arquivo. Aparentemente, deve ser UTF-8
sem assinatura. Se for UTF-8 BOM
(ou UTF-8 with Signature
como alguns editores de texto chamam), então será ignorado silenciosamente. Para piorar as coisas, alguns editores exibirão ambos os tipos como justos UTF-8
, tornando a diferença ainda mais difícil de detectar.
future:true
sem qualquer espaço depois:
em_config,yml
leva a ERR: arquivos de configuração: (inválido).future: true
a maioria pode ser usada em seu lugar.