Jekyllサイトに新しい投稿を追加しようとしていますが、jekyll serve
を実行すると、生成されたページに表示されません。
Jekyll投稿が生成されない一般的な理由は何ですか?
_posts
ディレクトリ。YEAR-MONTH-DAY-title.MARKUP
(MARKUP
拡張子に注意してください、通常は.md
または.markdown
)future: true
で_config.yml
を設定することで投稿を表示できます (documentation)published: false
その前の問題true
に設定します。:
character。 を:
に置き換えます。3.8.3
で動作します(おそらく他の「最新」リリースでも動作します)。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.
...
ログからjekyllは2018-01-14-boot-Android-on-charge.md
がスキップされたことがわかりました。これは将来の日付があるためです。
考えられる理由の1つは、フロントマターで指定されたdate
にタイムゾーンオフセットが含まれていないことです。この場合、デフォルトであるUTCであり、ローカルマシンのタイムゾーンではありません。 UTCが現在のローカルタイムゾーンであるBSTに「追いつく」まで、これに1時間を費やしました。
これに対する明確な答えは見つかりませんでしたが、前の問題の日付はUTCでタイムゾーンオフセット(省略した場合はデフォルトでゼロ)で指定する必要があると思います。
date: 2018-05-03 12:34:27
TC世界のどこにいても、_config.yml
のtimezone
設定に関係なく。
したがって、次のように日時を指定するよう注意してください。
date: 2018-05-03 12:34:27 +0100
または、_ siteフォルダーではなく、投稿のリストを含むブログのメインページに直接アクセスしている場合は、ブラウザーキャッシュにすることもできます。
これらのルールを表現する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構成は、コンテキストで見ることができます here 。
私の投稿にもエラーが表示されませんでした、私の名前ではドットを使用しました2017-10-18-test.2.md
。
これは受け入れられません。2017-10-18-test2.md
を使用する必要があります。
理由をもう1つ追加するために、_drafts
から_post
、場合によっては_site
再生成される記事。
私の場合、よく_site
は再生成前に完全に削除されないため、新しい記事は表示されません。
とにかくrm -rf _site
およびbundle exec jekyll serve
動作:)