Kilka dni temu napisałem o tym jak przygotować Vagranta do blogowania z Octopressem. Zwróciłem wtedy uwagę, że mimo wszystkich swoich zalet, Octopress nie jest wolny od wad. Poprzednim razem chodziło o dosyć skomplikowanym proces przygotowania środowiska. Dziś przedstawię drugą wadę, która jest moim zdaniem jeszcze bardziej uciążliwa. Zaprezentuję również znalezione „rozwiązanie” problemu. Jest to jednak raczej tylko pewnego rodzaju obejście, niż jego faktyczne wyeliminowanie.

Największą bolączką Octopressa jest według mnie bardzo długi czas generowania docelowej statycznej strony wzrastający z każdym nowo dodanym postem. Na chwilę obecną, na stronie torun.jug.pl (która jest oparta o Octopressa) mam około 60 postów. Czas generowania na moim kompie z Intel Core i5 i 6GB RAMu w takim przypadku wynosi około 5-7 minut. Nie będę tu wchodził w dokładne szczegóły i badanie tego, czy na lepszej maszynie to działa szybciej, bo szczerze mnie to nie interesuje. Mój (i pewnie nie tylko mój) problem jest taki, że na moim komputerze to działa uporczywie wolno. Nie byłby to bardzo duży problem, gdyby generowanie odbywało się tylko raz, tuż przed opublikowaniem nowej wersji strony. Niestety gdy edytujemy nowy post i wprowadzamy do niego poprawki, to musimy przegenerować cały projekt, żeby zobaczyć efekt swojej pracy. Octopress próbuje wychwycić wprowadzane zmiany i przegenerowywać tylko to co trzeba, ale zauważyłem, że nie wychodzi mu to idealnie – przynajmniej w wersji, którą ja mam w projekcie.

Udało mi się znaleźć pewien workaround związany z tym problemem. Co więcej, wygląda na to, że sam twórca Octopressa również widzi w tym problem, bo sam dostarcza nam to „rozwiązanie”. Będąc w folderze projektu wpisujemy w konsoli polecenie rake list -T. Dostajemy listę dostępnych komend, na której widnieją nieznane mi wcześniej rake isolate [search]rake integrate. Ta para polecań sprawia, że praca z Octopressem staje się mniej czasochłonna.

Polecenie rake isolate [search] „izoluje” posty, nad którymi chcemy pracować, od tych które są nam w tym momencie niepotrzebne. Te nadmiarowe posty są tymczasowo odkładane na bok, do folderu, który nie jest brany pod uwagę przy generowaniu projektu. I właśnie dzięki temu czas przegenerowania całej strony jest znacznie krótszy. Polecenie rake integrate jest dokładną odwrotnością polecenia rake isolate [search] i przywraca ono odłożone na bok posty do odpowiedniego folderu, przez co nasza strona jest znów kompletna. Używanie tych dwóch poleceń ułatwia nam życie i ogranicza konieczność generowania całej strony tylko do momentu gdy chcemy opublikować jej nową wersję.

Oto jak całość wygląda w praktyce. Na początek generujemy nowy post, nad którym chcemy popracować:

rake new_post["nowy post ktory przyniesie nam slawe i chwale"]

Następnie izolujemy ten post on pozostałych (zamiast parametru search, w nawiasach, wpisujemy część nazwy przed chwilą wygenerowanego posta):

rake isolate [nowy-post-ktory-przyniesie]

Dzięki temu pozostałe posty zostaną odłożone na półkę. Parametr search działa jak swego rodzaju filtr. Nie musimy więc dokładnie określać tytułu, wystarczy „trafić” w niego tym filtrem. Następnie przechodzimy do normalnej edycji nowego artykułu w swoim ulubionym edytorze tekstu. Na koniec przywracamy strukturę strony do pierwotnej postaci:

rake integrate

W tym momencie mamy już gotowy nowy post i możemy przystąpić do jego opublikowania albo zrobić z nim cokolwiek chcemy.

Niestety nie udało mi się znaleźć innego praktycznego rozwiązania, które przyspieszałoby działanie Octopressa na tym polu – oprócz dokupienia kilku dodatkowych procesorów, które zaproponował mi kolega 😉 Jeśli znacie jakieś inne rozwiązania, to chętnie się z nimi zapoznam.