Сообщение Jekyll не создано

100

Я пытаюсь добавить новое сообщение на свой сайт Jekyll, но не вижу его на сгенерированных страницах при запуске jekyll serve.

Каковы некоторые распространенные причины, по которым сообщение Jekyll не создается?

Aronisstav
источник

Ответы:

230
Aronisstav
источник
1
использование future:trueбез пробела после :in _config,ymlприводит к ERR: Файл конфигурации: (INVALID). future: trueвместо этого можно использовать большинство.
yaitloutou
Другая возможная причина - вы забыли добавить .markdownрасширение к имени файла. Я знаю это, потому что я только что потратил на это 5 минут своей жизни.
H2ONOCK
Спасибо вам большое! Просто искал 30 минут, почему мой пост не появляется, пока не понял, что есть фильтр даты ... (через 15 минут он сработает "волшебным образом" ...). Добавлен вариант будущего и все работает как положено. По моему мнению, true должно быть по умолчанию.
Matthias Kleine
1
Что мне не хватает. В названии моего сообщения есть двоеточие, это нормально? raw.githubusercontent.com/alexharv074/alexharv074.github.io/… и здесь все в порядке? alexharv074.github.io
Алекс Харви
1
@AlexHarvey Спасибо за комментарий! Кажется, это действительно больше не проблема. Я обновил свой ответ.
aronisstav
19

Вы можете использовать jekyll build --verboseдля подробного просмотра процесса сборки.

Пример вывода:

  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.
        ...

из журнала я обнаружил, что jeklly пропущен, 2018-01-14-boot-android-on-charge.mdпотому что у него есть дата в будущем.

Fangxing
источник
6

Одна из возможных причин заключается в том, что dateуказанное во вступительной части не содержит смещения часового пояса, и в этом случае по умолчанию используется UTC, а не часовой пояс локального компьютера, как вы могли ожидать. Я потратил на это час, пока UTC не «догнало» мой текущий местный часовой пояс, BST.

Я не нашел окончательного ответа на этот вопрос, но я думаю, что дата во вступительной части должна быть указана в UTC со смещением часового пояса (которое по умолчанию равно нулю, если оно опущено).

Так date: 2018-05-03 12:34:27 и в UTC независимо от того, где вы находитесь, и независимо от timezoneнастройки _config.yml.

Так что будьте осторожны, чтобы указать такие даты:

date: 2018-05-03 12:34:27 +0100
Starfry
источник
1
Формат date: 2018-05-03 12:34:27 +01:30тоже вроде работает. Обратите внимание на дополнительное двоеточие.
YinglaiYang
Потратил 10 минут, чтобы понять, что это была проблема. Спасибо!
samisnotinsane
2

Или это может быть и кеш браузера, если вы смотрите не в папку _site, а прямо на главную страницу блога со списком сообщений.

Р. Браун
источник
2

Я написал для своего блога тесты Rspec, которые выражают следующие правила:

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

Это может быть полезно другим, так как я терял много времени из-за опечаток в дате и т. Д.

Эти тесты вместе с остальной частью конфигурации Rspec можно увидеть в контексте здесь .

Алекс Харви
источник
2

Просто чтобы добавить еще одну причину, когда вы перемещаете статью из _draftsв _post, вам иногда нужно удалить, _siteчтобы статья была восстановлена.

В моем случае часто бывает, что _siteперед повторным созданием статьи не удаляются полностью, поэтому новая статья не появляется.

Все равно так rm -rf _siteи bundle exec jekyll serveработает :)

Тибо
источник
1

Если вы не можете отследить файл --verboseи если он игнорируется, попробуйте удалить его collections_dirв config.ymlфайле. Это решило проблему для меня.

Колаппан Н
источник
0

Мой пост также не появился из-за того, что в моем имени я использовал точку, например 2017-10-18-test.2.md.
Это не принято, вы должны использовать 2017-10-18-test2.md.

J_F
источник
0

Если вы проверили свое вступление, и все кажется хорошо, и даже jekyll build --verboseничего не показывает (в моем случае он просто действовал так, как будто файл вообще не существует, даже не перечисляя его как исключенный), проверьте кодировку вашего файла. Видимо, это должно быть UTF-8без подписи. Если это так UTF-8 BOM(или UTF-8 with Signatureкак это называют некоторые текстовые редакторы), то оно будет игнорироваться. Что еще хуже, некоторые редакторы будут отображать оба типа как справедливые UTF-8, что делает разницу еще труднее.

Даниэль Кис-Надь
источник