Post Jekyll nie został wygenerowany


100

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:


230

1
użycie future:truebez spacji po :in _config,ymlprowadzi do ERR: Plik konfiguracyjny: (INVALID). future: truenajczęściej używane.
yaitloutou

Innym możliwym powodem jest zapomnienie o dodaniu .markdownrozszerzenia do nazwy pliku. Wiem o tym, bo właśnie przez to zmarnowałem 5 minut swojego życia.
H2ONOCK

Dziękuję bardzo! Przeszukałem tylko 30 minut, dlaczego mój post nie jest wyświetlany, dopóki nie zrozumiałem, że istnieje filtr dat… (w 15 minut zadziała „magicznie”…). Dodano opcję przyszłości i wszystko działa zgodnie z oczekiwaniami. moim zdaniem true powinno być domyślne.
Matthias Kleine

1
Czego mi brakuje. Mój post ma w tytule dwukropek i jest ok? raw.githubusercontent.com/alexharv074/alexharv074.github.io/ ... i tutaj wygląda dobrze? alexharv074.github.io
Alex Harvey

1
@AlexHarvey Dzięki za komentarz! Rzeczywiście wydaje się, że nie stanowi to już problemu. Zaktualizowałem odpowiedź.
aronisstav

19

Możesz użyć, jekyll build --verboseaby 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.mdponieważ ma przyszłą datę.


6

Jednym z możliwych powodów jest to, że datepodana 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

1
date: 2018-05-03 12:34:27 +01:30Wydaje się, że format również działa. Zwróć uwagę na dodatkowy dwukropek.
YinglaiYang

Zmarnowano 10 minut, aby zdać sobie sprawę, że to był problem. Dzięki!
samisnotinsane

2

Lub też może to być pamięć podręczna przeglądarki, jeśli szukasz nie w folderze _site, ale bezpośrednio na stronie głównej bloga z listą postów.


2

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 .


2

Aby dodać jeszcze jeden powód, kiedy przenosisz artykuł z _draftsdo _post, czasami musisz usunąć _siteartykuł do ponownego wygenerowania.

W moim przypadku często zdarza się, że _sitenie zostanie całkowicie usunięty przed ponownym wygenerowaniem, więc nowy artykuł się nie pojawi.

Zresztą rm -rf _sitei bundle exec jekyll servedziała :)


1

Jeśli nie jesteś w stanie śledzić plik --verbosei jeśli plik zostanie zignorowane następnie spróbuj usunąć collections_dirw config.ymlpliku. To rozwiązało problem.


0

Mój post też się nie pojawił a błąd polegał na tym, że w swoim imieniu użyłem kropki np 2017-10-18-test.2.md.
To nie jest akceptowane, musisz użyć 2017-10-18-test2.md.


0

Jeśli sprawdziłeś swoją pierwszą sprawę i wszystko wydaje się być w porządku, a nawet jekyll build --verbosenic 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-8bez podpisu. Jeśli tak UTF-8 BOM(lub UTF-8 with Signaturejak 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.