Bài đăng Jekyll không được tạo


100

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:


230

1
sử dụng 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ế.
yaitloutou

Một lý do khác có thể là do quên thêm .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ó.
H2ONOCK

Cảm ơn bạn rất nhiều! Chỉ cần tìm kiếm trong 30 phút tại sao bài đăng của tôi không hiển thị cho đến khi tôi hiểu rằng có một bộ lọc ngày ... (trong 15 phút nữa, nó sẽ hoạt động "một cách kỳ diệu" ...). Đã thêm tùy chọn trong tương lai và mọi thứ hoạt động như mong đợi. đúng nên được mặc định theo ý kiến ​​của tôi.
Matthias Kleine

1
Tôi đang thiếu gì. Bài viết của tôi ở đây có dấu hai chấm trong tiêu đề và nó ổn chứ? raw.githubusercontent.com/alexharv074/alexharv074.github.io/… và nó xuất hiện ổn ở đây? alexharv074.github.io
Alex Harvey -

1
@AlexHarvey Cảm ơn bạn đã nhận xét! Điều này thực sự dường như không phải là một vấn đề nữa. Tôi đã cập nhật câu trả lời của mình.
aronisstav

19

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.


6

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

1
Định dạng này 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.
YinglaiYang

Mất 10 phút để nhận ra đây là vấn đề. Cảm ơn!
samisnotinsane

2

Hoặc nó cũng có thể là bộ nhớ cache của trình duyệt nếu bạn không tìm kiếm trong thư mục _site mà trực tiếp trên trang chính của blog với danh sách các bài đăng.


2

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 .


2

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 _sitebundle exec jekyll servehoạt động :)


1

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.


0

Bài viết của tôi cũng không xuất hiện lỗi, đó là trong tên của tôi, tôi đã sử dụng dấu chấm, ví dụ 2017-10-18-test.2.md.
Điều này không được chấp nhận, bạn phải sử dụng 2017-10-18-test2.md.


0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.