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 ý MARKUPphần mở rộng , thường là.mdhoặc.markdown)future: truetrong _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)..markdownphầ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.mdvì nó có ngày trong tương lai.
Một lý do có thể là do datechỉ đị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 timezonecà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:30dườ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ừ _draftssang _post, đôi khi bạn cần phải xóa _sitebà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ó _sitesẽ 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 _sitevà bundle exec jekyll servehoạt động :)
Nếu bạn không thể theo dõi tệp trong --verbosevà nếu tệp bị bỏ qua một cách im lặng thì hãy thử xóa collections_dirtrong config.ymltệ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 --verbosekhô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-8không có chữ ký. Nó UTF-8 BOM(hoặc UTF-8 with Signaturenhư 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:truemà không có bất kỳ khoảng trống nào sau khi:in_config,ymldẫn đến ERR: Tệp cấu hình: (INVALID).future: truehầu hết được sử dụng thay thế.