ts23
20.04.2009, 14:53:57
Witam
mam problem z dość sporym instalatorem. W skrócie, skrypt instaluje różnego rodzaju aplikacje (głównie cms-y) na serwerze. Idea jest prosta - instalator kopiuje elementy aplikacji (core, dodatkowe moduły, szablony, grafikę itp) z różnych źródeł (ftp, svn, baza) na serwer, następnie odpala na serwerze odpowiedni instalator który aplikację konfiguruje i po sobie zamiata. Wszystko działa tak jak trzeba, niestety za wolno. Z uwagi na obciążenie klastra cały proces może trwać i pół godziny, podczas gdy apache ucina połączenie i wysyła internal server error po 15 minutach, nie bacząc na time limit skryptu php (skrypt kontynuuje działanie i robi wszystko co powinien, ale urywa się komunikacja i nie ma logów). Gros czasu zajmuje rozpakowywanie archiwów i kopiowanie plików w odpowiednie miejsca. I tu pytanie: jak można to przyspieszyć?
Próbowałem już zastąpić archiwum zip tar-em (Archive_Tar z PEAR) , ale nie daje to jakiejś znaczącej różnicy w czasie. Timeout apacha jest nie do ruszenia, podobnie jak trzymanie lokalnej kopii plików na klastrze (za dużo możliwych kombinacji). Posiłkowanie się exec-em też raczej nie wchodzi w grę.
na razie przychodzi mi na myśl albo podzielenie całej instalacji na krótsze procesy (wszystko jest odpalane z panelu administracyjnego via ajax), albo odpalanie crona, np. co kwadrans. Może jeszcze odzyskiwanie logów ex post (ale wtedy trzeba wiedzieć kiedy instalator skończył)
Może ktoś ma jakieś lepsze pomysły?
erix
20.04.2009, 18:01:45
Cytat
na razie przychodzi mi na myśl albo podzielenie całej instalacji na krótsze procesy (wszystko jest odpalane z panelu administracyjnego via ajax),
http://www.alternateinterior.com/2007/05/m...ies-in-php.htmlNaprościej będzie odpalić ten skrypt z opóźnieniem i np. wysyłać powiadomienie na maila o zakończeniu instalacji.
ts23
21.04.2009, 12:09:17
Cytat(erix @ 20.04.2009, 19:01:45 )

http://www.alternateinterior.com/2007/05/m...ies-in-php.htmlNaprościej będzie odpalić ten skrypt z opóźnieniem i np. wysyłać powiadomienie na maila o zakończeniu instalacji.
Mail już jest, problem polega na tym żeby operator dostał loga na ekran ...
erix
21.04.2009, 14:51:42
No to pozostaje jakiś window.open + odświeżanie co parę sekund, a skrypt sprawdza, czy np. instalator utworzył pewien plik.
ts23
21.04.2009, 15:20:12
Cytat(erix @ 21.04.2009, 15:51:42 )

No to pozostaje jakiś window.open + odświeżanie co parę sekund, a skrypt sprawdza, czy np. instalator utworzył pewien plik.
Na tym się pewnie skończy
guitarnet.pl
21.04.2009, 16:09:50
a nie mozesz rozdzielic pliku wykonujacego instalacje od prezentujacego pasek postepu? i ewentuanie podzielic plik wykonujacy instalacje na etapy i logowac kazdy zakonczony pomyslnie etap?
wtedy wyswietlasz uzytkownikowi strone z postepem 0%, odpalasz twoj skrypt instalacji przez fsockopen w tle, ewentualnie respawn jak podzielisz na etapy instalacji zeby wywolywal sam siebie po zakonczonym etapie i za pomoca ajaxa co iles tam sekund zmieniaj zawartosc paska postepu instalacji na podstawie odczytu logow - w logach poszczegolne etapu instalacji beda zapisywac pomyslne zkaonczenie?
erix
21.04.2009, 19:29:55
ts23
24.04.2009, 19:01:16
Dla potomności: w końcu wybrałem najprostsze rozwiązanie - instalator podzielony na 6 części + javascript odpalający kolejne $.getJSON po zakończeniu poprzedniego.