2011-08-07 10 views
12

Zastanawiam się nad Jekyll dla strony, którą składam, która będzie blogiem z dużą ilością obrazów (i innych dużych plików multimedialnych). Utworzenie katalogu z obrazami jest dość łatwe, a następnie linkowanie do nich w razie potrzeby w postach. Ale, jak rozumiem, po wygenerowaniu strony wszystkie dane obrazu zostaną skopiowane do wygenerowanego katalogu _site zawierającego pliki statyczne. Za każdym razem, gdy witryna jest generowana, katalog _site jest opróżniany i ponownie zapełniany statyczną wersją strony.Jak mogę skonfigurować Jekyll dla bloga z dużym katalogiem obrazów, aby uniknąć powielania tego katalogu w wygenerowanej witrynie?

Czy można na przykład usunąć symboliczne dowiązanie do katalogu images w katalogu witryny, a następnie może jekyll zignorować podczas generowania plików statycznych?

Czy jest jeszcze inny sposób, aby to osiągnąć, które ma więcej sensu?

Odpowiedz

10

Zakładając, że korzystasz z serwera WWW Apache, możesz skonfigurować dyrektywę Alias, aby wyświetlać obrazy z katalogu spoza normalnego dokumentu docroot. Potrzebujesz dostępu do edycji konfiguracji VirtualHosts lub innej możliwości tworzenia instrukcji aliasów (np. Za pośrednictwem panelu sterowania).

Aby zobaczyć, jak to działa, załóżmy, że przechowujesz swoje pliki jekyll w katalogu o nazwie "/ web/jekyll". Aby uzyskać katalog obrazów, wykonaj następujące czynności:

  1. Dodaj katalog "_images" wraz z podstawowym drzewem jekyll. Kończący się z czymś takim:

    _config.yml 
    _images/ 
    _layouts/ 
    _posts/ 
    _site/ 
    index.md 
    
  2. aktualizacji konfiguracji Apache, aby dodać dyrektywę Alias ​​jak:

    Alias /images /web/jekyll/_images 
    
  3. przeładować config apache i uruchomić Jekyll zbudować witrynę.

Ponieważ nazwa katalogu obrazu zaczyna się od podkreślenia, Jekyll nie popchnie/skopiować go do _site wyjściowego podczas kompilacji. Apache z powodzeniem będzie obsługiwał większość plików z twojego katalogu _site jak zwykle, ale gdy zobaczy coś takiego jak "http: //jekyll/images/test.jpg", zamiast szukać pliku pod "/ web/jekyll/_site/_images/test.jpg ", wyświetli go z" /web/jekyll/_images/test.jpg ".


Nawiasem mówiąc, jak trochę więcej separacji zawartości źródło treści i wyjściowego niż JEKYLL wartością domyślną. Więc moja konfiguracja struktury katalogów w następujący sposób:

/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 

z następującymi możliwości określonej w _config.yml

destination: ../html 

i dyrektywa konfiguracji apache alias z:

Alias /images /web/jekyll/images 

Jekyll jest działa w katalogu "/ web/jekyll/source", ale dane wyjściowe są wysyłane do katalogu "/ web/jekyll/html". Podobnie jak w pierwszym przykładzie, wywołania "http: //jekyll/images/test.jpg" są wysyłane z "/web/jekyll/images/test.jpg". Ta konfiguracja tak naprawdę nie ma wpływu na perspektywę wyświetlania witryny. Po prostu lubię czystszą separację między plikami źródłowymi, w pełni wypalonymi plikami wyjściowymi i obrazami, które działają przez alias.

+1

Widzę, jak to zadziała, ale powinienem był wspomnieć, że naprawdę * podoba mi się katalog z obrazami znajdujący się w katalogu _sites, ponieważ usprawniłoby to synchronizację całej sprawy z serwerem. Jakieś dalsze spostrzeżenia? (BTW, dziękuję za wskazówki dotyczące struktury strony.) Doceniam twoje poświęcenie czasu.) –

+0

Nie jestem pewien, jak inaczej to zrobić w tej chwili. Jedna uwaga na temat rsync, z drugim przykładem ze strukturą aktualizacji, chodziło tylko o zsynchronizowanie wszystkiego w "/ web/jekyll /" z serwerem. Katalogi "html" i "images" będą faktycznie używane, a katalog "source" po prostu zapewni kopię zapasową kodu poza siedzibą. –

+0

Jeszcze jedna myśl się wydarzyła. Będziesz chciał zachować ostrożność z dowiązaniem symbolicznym w dowolnym miejscu, do którego prowadzi wyjście Jukill. Jeśli masz kod, który pozwala na obecność dowiązania symbolicznego, ale zostanie on uszkodzony podczas aktualizacji, możliwe, że jekyll może usunąć wszystkie twoje obrazy źródłowe. –

0
  1. Wykonaj project page dla obrazów.
  2. Konfigurowanie struktury katalogów

    /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 
    

Uwaga używałem tego, ponieważ myślałem, że to pomoże opublikować czas na GitHub stronach. To nie. GitHub może trwać 1-10 minut, aby opublikować w zależności od serwera .

0

Prawidłowo, pierwsza część komendy jekyll usuwa wszystko z katalogu docelowego. Problem polega na tym, że dowiązania symboliczne muszą zostać ponownie utworzone ręcznie. Następnie wykonaj skrypt, który robi to za każdym razem.

Pamiętaj, że:

wykluczyć: [Jekyll, css, img] w pliku _config.yml

Linux: ";" symbol uruchamia polecenia pierwszy, drugi, trzeci ..

scenariusz: Plik o nazwie Jekyll z uprawnieniami wykonywalnych zawierający

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

końcu uruchomić (./jekyll) ten program zamiast Jekylla.

-Dan

0

wiem, że to już odpowiedział, ale poszedł nieco inną trasą. Udostępniłem wszystkie moje obrazy w publicznym katalogu na Dropbox i używam gruntu do generowania manifestu obrazów. Utrzymuje małe repozytorium, ponieważ obrazy nie są rejestrowane. Wyszczególniłem je z powrotem w numerze blog post.

Powiązane problemy