2011-08-07 31 views
12

Tôi đang xem xét Jekyll cho một trang web mà tôi đang tập hợp lại sẽ là một blog có nhiều hình ảnh (và các tệp phương tiện truyền thông lớn khác). Thật dễ dàng để tạo một thư mục cho hình ảnh và sau đó liên kết với chúng khi cần thiết trong các bài đăng. Nhưng, như tôi đã hiểu, khi trang web được tạo, tất cả dữ liệu hình ảnh sẽ được sao chép vào thư mục _site được tạo ra chứa các tệp tĩnh. Mỗi lần trang web được tạo ra, thư mục _site được làm trống và được tái hoạt động với phiên bản tĩnh của trang web.Làm cách nào để thiết lập Jekyll cho một blog có thư mục hình ảnh lớn, để tránh trùng lặp thư mục đó trong trang web được tạo?

Có cách nào để, ví dụ, thả một liên kết tượng trưng vào thư mục hình ảnh bên trong thư mục trang web, và sau đó có thể có jekyll bỏ qua nó khi các tệp tĩnh được tạo ra?

Hoặc có cách nào khác để thực hiện việc này có ý nghĩa hơn không?

Trả lời

10

Giả sử bạn đang chạy trên máy chủ web apache, bạn có thể thiết lập chỉ thị Bí danh để phân phát hình ảnh từ thư mục bên ngoài docroot thông thường. Bạn cần truy cập để chỉnh sửa cấu hình VirtualHosts hoặc một số khả năng khác để tạo chỉ thị bí danh (ví dụ: thông qua bảng điều khiển).

Để biết ví dụ về cách tính năng này hoạt động, giả sử bạn đang lưu trữ các tệp jekyll của mình trong thư mục có tên "/ web/jekyll". Để có thư mục hình ảnh của bạn, hãy làm như sau:

  1. Thêm thư mục "_images" cùng với cây jekyll cơ bản của bạn. Kết thúc với một cái gì đó như:

    _config.yml 
    _images/ 
    _layouts/ 
    _posts/ 
    _site/ 
    index.md 
    
  2. Cập nhật apache của bạn cấu hình để thêm phần Alias ​​như:

    Alias /images /web/jekyll/_images 
    
  3. Tải lại apache config và chạy Jekyll để xây dựng trang web.

Vì tên thư mục hình ảnh bắt đầu bằng dấu gạch dưới, jekyll sẽ không đẩy/sao chép nó vào đầu ra _site trong khi xây dựng. Apache sẽ vui vẻ phục vụ hầu hết các tệp từ thư mục _site của bạn như bình thường, nhưng khi nó nhìn thấy một cái gì đó như "http: //jekyll/images/test.jpg", thay vì tìm kiếm tệp trong "/ web/jekyll/_site/_images/test.jpg ", nó sẽ phục vụ nó từ" /web/jekyll/_images/test.jpg ".


Ngẫu nhiên, tôi muốn tách biệt hơn một chút nội dung nguồn và nội dung đầu ra hơn mặc định jekyll. Vì vậy, tôi thiết lập cấu trúc thư mục của tôi như sau:

/web/jekyll/html/ 
/web/jekyll/images/ 
/web/jekyll/source/ 
/web/jekyll/source/_config.yml 
/web/jekyll/source/_layouts 
/web/jekyll/source/_posts 
/web/jekyll/source/index.md 

Với tùy chọn sau đây đặt trong _config.yml

destination: ../html 

Và thiết lập chỉ thị apache bí danh với:

Alias /images /web/jekyll/images 

Jekyll là chạy trong thư mục "/ web/jekyll/source", nhưng đầu ra được gửi đến thư mục "/ web/jekyll/html". Tương tự như ví dụ đầu tiên, các cuộc gọi tới "http: //jekyll/images/test.jpg" được phục vụ từ "/web/jekyll/images/test.jpg". Thiết lập này không thực sự tạo sự khác biệt so với phối cảnh phân phối trang web. Tôi chỉ thích việc tách biệt giữa các tệp nguồn thô, các tệp đầu ra được nướng hoàn toàn và các hình ảnh hoạt động thông qua bí danh.

+1

Tôi có thể thấy cách thức này sẽ hoạt động, nhưng tôi đã đề cập rằng tôi muốn * thực sự * giống như thư mục hình ảnh nằm trong thư mục _sites, vì điều đó sẽ hợp lý hóa toàn bộ việc với máy chủ. Có thêm thông tin chi tiết nào không? (BTW, cảm ơn những lời khuyên về cấu trúc trang web. Tôi đánh giá cao việc bạn dành thời gian.) –

+0

Tôi không chắc chắn làm cách nào khác để làm điều đó vào lúc này. Một lưu ý về rsync, với ví dụ thứ hai với cấu trúc cập nhật, ý tưởng sẽ chỉ là để rsync tất cả mọi thứ trong "/ web/jekyll /" lên đến máy chủ của bạn. Thư mục "html" và "hình ảnh" sẽ thực sự được sử dụng và thư mục "nguồn" sẽ chỉ cung cấp cho bạn bản sao lưu trang web tắt của mã của bạn. –

+0

Một ý nghĩ khác chỉ xảy ra. Bạn sẽ cần phải cẩn thận với một liên kết tượng trưng bất cứ nơi nào mà jekyll xuất ra. Nếu bạn có mã cho phép liên kết tượng trưng ở đó nhưng nó bị hỏng trong quá trình nâng cấp, có thể jekyll có thể xóa tất cả hình ảnh nguồn của bạn. –

0
  1. Tạo project page cho hình ảnh.
  2. Thiết lập cấu trúc thư mục

    /home/git/svnpenn.github.io 
    /home/git/img 
    
  3. Run Jekyll

    # We cant add the symlink until after jekyll is done. We will remove the 
    # site folder and wait for it to rebuild. 
    rm -r _site 
    jekyll --server & 
    while [ ! -f _site/index.html ] 
    do 
        sleep 1 
    done 
    ln -s ../images _site/images 
    

Note Tôi đã sử dụng này bởi vì tôi nghĩ rằng nó sẽ giúp thời gian xuất bản trên GitHub trang. Nó không. GitHub có thể mất 1-10 phút để xuất bản tùy thuộc vào máy chủ .

0

Chính xác, phần đầu tiên của lệnh jekyll sẽ xóa mọi thứ trong thư mục đích. Vấn đề với đó là các liên kết tượng trưng phải được tạo lại bằng tay. Vì vậy, tiếp theo, hãy tiếp tục và tạo một kịch bản thực hiện việc này mỗi lần.

Hãy chắc chắn rằng:

loại trừ: [Jekyll, css, img] trong file _config.yml

linux: Các ";" biểu tượng chạy lệnh đầu tiên, thứ hai, thứ ba ...

kịch bản: Một tập tin có tên Jekyll với các điều khoản thực thi chứa

jekyll; 
ln -s /var/www/css /var/www/_site/css; 
ln -s /var/www/img /var/www/_site/img; 

Cuối cùng chạy (./jekyll) chương trình mà thay vì Jekyll.

-Dan

0

Tôi biết điều này đã được trả lời, nhưng tôi đã đi một con đường hơi khác. Tôi đã lưu trữ tất cả hình ảnh của mình trong một thư mục công khai trên Dropbox và sử dụng grunt để tạo ra tệp kê khai của hình ảnh. Nó giữ kho của tôi nhỏ vì hình ảnh không được đăng ký. Tôi đã mô tả chi tiết nó trong khi quay lại trong một blog post.

Các vấn đề liên quan