2011-11-01 12 views
13

Używam aplikacji Rails 3.1 na stosie Heroku Cedar, która obsługuje potok zasobów. Heroku lists 3 ways do kompilacji zasobówAplikacja Heroku rails 3.1 - kompilowanie zasobów lokalnie vs kompilowanie zasobów podczas kompilacji zliczeń

  1. Kompilowanie zasobów lokalnie.
  2. Kompilowanie zasobów podczas kompilacji slug.
  3. Skompiluj zasoby w czasie wykonywania.

Oczywiście nr 3 jest szkodliwy dla wydajności, a dokumentacja Heroku również go odradza. Ale nie jestem pewien, który jest lepszy między 1 a 2.

# 1 wymaga uruchomienia rake assets:precompile i włączenia folderu public/assets w git. Twój ślimak będzie większy, ale zakładam, że przestój na wdrożenie witryny będzie niższy. Ale większy rozmiar ślimaka oznacza wolniejsze uruchamianie aplikacji, więc może to pranie.

# 2 spowoduje, że wdrożenie aktualizacji zajmie więcej czasu, ponieważ preokompilacja odbywa się po stronie Heroku. Będziesz miał jednak mniejszy ślimak i nie będziesz go więcej zarządzać/pamiętać.

Moje pytanie brzmi - która opcja (nr 1 lub nr 2) jest najlepsza dla produkcji i dlaczego?

Do tej pory wygląda jak opcja nr 2, ale chcę się upewnić, że czegoś nie przeoczyłem.

+0

http://devcenter.heroku.com/articles/cdn-asset-host-rails31 to również dobra lektura - chociaż synchronizuje zasoby z S3 z aplikacji na Heroku, więc nadal są obecne w Twoim ślimaku, ale nie są obsługiwane z Heroku. –

+0

również czasami # 2 nie zawsze jest opcją. Heroku zawsze będzie starał się je skompilować podczas kompilacji slug, a jeśli nie, to w czasie wykonywania. –

Odpowiedz

7

skierowałem niektóre z tych zagadnień i dużym Gotcha w moje pytanie tutaj: Rails 3.1.1 asset pipeline Heroku caching gotcha

wolałbym nr 2, jeśli pracował dla mnie, więc nie trzeba meldowanie skompilowane aktywa, które właśnie bloats GIT magazyn.

Kompilowanie zasobów podczas kompilacji zliczeń nie spowoduje żadnych dodatkowych przestojów, ponieważ istniejąca aplikacja pozostanie w komplecie, dopóki kompilacja kuli nie zostanie zakończona, więc nie martw się.

Moja rada byłaby # 2, jeśli możesz sprawić, by działała ona prawidłowo. Jeśli skończysz jako w/# 1, najlepszą praktyką będzie git rr -r public/assets przed aktywami rake: prekompiluj, aby upewnić się, że nie pozostanie żaden cruft.

+0

Aktualizacja: opcja nr 2 działa teraz dla mnie po uaktualnieniu do wersji 1.5.0 - znacznie czystsze niż sprawdzanie aktywów. –

+0

Jeśli nie masz wyboru oprócz # 1, dobrze jest utworzyć zadanie rake do wdrożenia na Heroku. Będzie to 1) usunąć łono/aktywa 2) dokonać prekompilacji aktywów 3) sprawdzić nowo skompilowane aktywa do git 4) nacisnąć do heroku. – Dty

+0

# 2 jest również moją preferowaną opcją - ale zawsze byłem zdezorientowany, dlaczego ukończenie tego zajmuje tyle czasu. Powinno to być po prostu kilkanaście plików i gzipowanie. Może minifikacja trwa najdłużej, by sprawdzić składnię itd.? Wszelkie doceniane doceny. –

2

To może zależeć od wielkości folderu aktywów, (a może rozwiązanie długoterminowe byłoby umieścić te aktywa poza aplikacji i udostępniać je na S3 lub tym podobne).

W przeciwnym razie, jestem zakładająC# 1 byłby najlepszy w produkcji, ponieważ każdy zasób może być używany i buforowany od razu.

Czytam dokumentację Heroku w sekcji assets, i zdają się wskazywać, że # 2 zostanie użyty na wypadek, gdybyś zapomniał zrobić to sam, dla wygody. Nie dostaniesz małego ślimaka, ponieważ wyniki przygotowania majątku zostaną uwzględnione w ślimaku do wdrożenia.

+0

bardzo interesujące, że rozmiar ślimaka nie jest mniejszy. Dzięki za te informacje. Ale dlaczego buforowanie w # 1 różni się od # 2? – Dty

Powiązane problemy