Capistrano i modyfikacja kodu przed deploymentem

Czołem,

Czy ktoś z zacnego grona wymiataczy w Capistrano podpowie mi, jak podpiąć taska, który zrobi zmiany w kodzie lokalnym, tj. przed spakowaniem i rozesłaniem na serwery? Potrzebuję yuicompressorem pociągnąć wszytkie skrypty JS i CSS, tylko nie chcę robić tego na każdym z serwerów z osobna, bo to przecież bez sensu. Coś nie mogę się doszukać nazw hooków, pod które mógłbym się ewentualnie podpiąć, a także zmiennej ze ścieżką katalogu, gdzie leżą lokalne pliki po pobraniu z repozytorium.

Google podpowiedziało zaledwie kilka wartych uwagi stron, ale ograniczały się one z zasady do utworzenia własnej strategii kopiowania. Nie da się inaczej?

https://github.com/capistrano/capistrano/wiki/2.x-Default-Deployment-Behaviour - tutaj znajdziesz defaultową ścieżkę zadań capistrano. Swoje własne dodajesz używając before i after, np.

after 'deploy:update_code', 'do_my_magic_stuff'

Przy czym oczywiście musisz mieć zdefinowane zadanie do_my_magic_stuff.

[quote=squil]https://github.com/capistrano/capistrano/wiki/2.x-Default-Deployment-Behaviour - tutaj znajdziesz defaultową ścieżkę zadań capistrano. Swoje własne dodajesz używając before i after, np.

after 'deploy:update_code', 'do_my_magic_stuff'

[/quote]
Dzięki, ale to już wiem :wink: Z tego co widzę, “deploy:update_code” zachowuje się tak:

  • “before” - kod nie został pobrany jeszcze z repo
  • “after” - już po ptakach, bo task skompresował i wrzucił kod na serwer (tak wynika z logów capistrano)

I dalej nie mam możliwości wpięcia się w ten proces, aby pozmieniać coś w kodzie przed jego kompresją… No nic, chyba faktycznie skończy się na własnej strategii, jakoś nie widzę innego wyjścia.

Się nie da. Capistrano (domyślnie) ciągnie kod z repozytorium na serwer. Nie “pakuje” i nie “wysyła” - to proces zdecentralizowany. Capistrano uruchamiasz na jednej maszynie (na przykład swojej lokalnej), ale wszystkie zadania wywoływane są na maszynach zdalnych według przydzielonych ról.

Generalnie da się, Capistrano posiada proste wrappery do eftepowego get i put.
(przynajmniej kiedyś były i działały, choć bez śladu w dokumentacji – mogły wylecieć)

Inną kwestią jest czy należy z tego korzystać :wink:

@mariuszg ja kiedys dopisywalem scalenie i pakowanie css i js automatycznie wplecione w deployment - http://blog.sebastiannowak.net/2009/07/02/ruby-on-rails-asset-packager/ Ciebie powinna zainteresowac ostatnia czesc tego wpisu poświęcona Capistrano. Samo zadanie u Ciebie będzie wyglądać inaczej, ale idea ta sama.

[quote=Tomash]Generalnie da się, Capistrano posiada proste wrappery do eftepowego get i put.
(przynajmniej kiedyś były i działały, choć bez śladu w dokumentacji – mogły wylecieć)

Inną kwestią jest czy należy z tego korzystać ;)[/quote]
Koszerność: 0 na 10. :wink:

I zysk vardzi skromny.