Tôi đang cố gắng thêm một bài đăng mới vào trang web Jekyll của mình, nhưng tôi không thể nhìn thấy nó trên các trang đã tạo khi tôi chạy jekyll serve
.
Một số lý do phổ biến khiến bài đăng Jekyll không được tạo là gì?
Tôi đang cố gắng thêm một bài đăng mới vào trang web Jekyll của mình, nhưng tôi không thể nhìn thấy nó trên các trang đã tạo khi tôi chạy jekyll serve
.
Một số lý do phổ biến khiến bài đăng Jekyll không được tạo là gì?
Câu trả lời:
_posts
thư mục.YEAR-MONTH-DAY-title.MARKUP
( Lưu ý MARKUP
phần mở rộng , thường là.md
hoặc.markdown
)future: true
trong _config.yml
(tài liệu)published: false
vấn đề phía trước của nó. Đặt nó thànhtrue
.:
ký tự. Thay thế nó bằng:
. 3.8.3
(và có thể trong các bản phát hành 'gần đây' khác)..markdown
phần mở rộng vào tên tệp. Tôi biết điều này bởi vì tôi vừa lãng phí 5 phút của cuộc đời mình vì nó.
Bạn có thể sử dụng jekyll build --verbose
để xem chi tiết quá trình xây dựng.
Đầu ra bản đồ:
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.
...
từ nhật ký, tôi thấy jeklly bị bỏ qua 2018-01-14-boot-android-on-charge.md
vì nó có ngày trong tương lai.
Một lý do có thể là do date
chỉ định trong vấn đề phía trước không chứa chênh lệch múi giờ, trong trường hợp đó, nó mặc định là UTC, không phải múi giờ của máy cục bộ như bạn có thể mong đợi. Tôi đã lãng phí một giờ cho việc này cho đến khi UTC "bắt kịp" với múi giờ địa phương hiện tại của tôi, BST.
Tôi chưa tìm thấy câu trả lời chắc chắn cho điều này nhưng tôi nghĩ ngày ở vấn đề chính phải được cung cấp theo UTC với chênh lệch múi giờ (mặc định là 0 nếu bị bỏ qua).
date: 2018-05-03 12:34:27
Trong UTC cũng vậy, không phân biệt bạn đang ở đâu trên thế giới và không phân biệt timezone
cài đặt ở đâu _config.yml
.
Vì vậy, hãy cẩn thận chỉ định ngày giờ như thế này:
date: 2018-05-03 12:34:27 +0100
date: 2018-05-03 12:34:27 +01:30
dường như cũng hoạt động. Lưu ý thêm dấu hai chấm.
Tôi đã viết các bài kiểm tra Rspec cho blog của mình thể hiện các quy tắc sau:
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
Điều này có thể được sử dụng cho những người khác vì tôi đã mất rất nhiều thời gian do lỗi chính tả trong ngày, v.v.
Các bài kiểm tra này cùng với phần còn lại của cấu hình Rspec có thể được nhìn thấy trong ngữ cảnh ở đây .
Chỉ cần thêm một lý do nữa, khi bạn chuyển một bài viết từ _drafts
sang _post
, đôi khi bạn cần phải xóa _site
bài viết đó để bài viết được tạo lại.
Trong trường hợp của tôi, nó thường xảy ra rằng nó _site
sẽ không bị xóa hoàn toàn trước khi tạo lại nên bài viết mới sẽ không xuất hiện.
Dù sao rm -rf _site
và bundle exec jekyll serve
hoạt động :)
Nếu bạn không thể theo dõi tệp trong --verbose
và nếu tệp bị bỏ qua một cách im lặng thì hãy thử xóa collections_dir
trong config.yml
tệp. Điều đó đã giải quyết vấn đề cho tôi.
Nếu bạn đã kiểm tra vấn đề phía trước của mình và tất cả đều có vẻ tốt và thậm chí jekyll build --verbose
không tiết lộ bất kỳ điều gì (trong trường hợp của tôi, nó chỉ hoạt động như thể tệp hoàn toàn không tồn tại, thậm chí không liệt kê nó là loại trừ), hãy kiểm tra mã hóa của tệp của bạn. Rõ ràng, nó cần phải UTF-8
không có chữ ký. Nó UTF-8 BOM
(hoặc UTF-8 with Signature
như một số trình soạn thảo văn bản gọi nó), sau đó nó sẽ bị bỏ qua một cách im lặng. Để làm cho vấn đề tồi tệ hơn, một số trình chỉnh sửa sẽ hiển thị cả hai loại như nhau UTF-8
, khiến sự khác biệt thậm chí còn khó phát hiện hơn.
future:true
mà không có bất kỳ khoảng trống nào sau khi:
in_config,yml
dẫn đến ERR: Tệp cấu hình: (INVALID).future: true
hầu hết được sử dụng thay thế.