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


100

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

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

Ответы:


230

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потому что у него есть дата в будущем.


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

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.


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.