2016-02-09 13 views
6

Mam witrynę Symfony2, którą testuję w produkcji. Poszedłem dalej i wyczyściłem jego pamięć podręczną, ponieważ dokonałem i prawdopodobnie wprowadzę więcej modyfikacji, ale jest mały problem:Obsługa pamięci podręcznej Symfony w produkcji

Podczas gdy pamięć podręczna jest czyszczona i mówi, potem chcę ją rozgrzać, osoba, która uzyskuje dostęp strona internetowa odbudowuje pamięć podręczną. Stwarza to niewielki problem podczas budowania pamięci podręcznej, ale nie całkowicie, podczas gdy połowa z nich zostaje usunięta, ponieważ usuwanie jest nadal w toku.

Co się dzieje później, pamięć podręczna jest budowana, ale tylko jej część. Symfony uważa, że ​​pamięć podręczna jest w całości zbudowana i działa bez prób jej budowania, ale działa na półbudowanej pamięci podręcznej. Proces usuwania jest nieco długi (~ 15 sekund), więc w tym czasie nikt nie może próbować tworzyć pamięci podręcznej, wchodząc na stronę.

Albo to, albo pamięć podręczna jest całkowicie zbudowana, nadpisuje starą pamięć podręczną, a system traktuje te nowe pliki jako stare, usuwa ich część, a niektóre pozostałe. Nie jestem do końca pewien, nie jestem pewien, jak to sprawdzić.

Na przykład, jeden z błędów, które chciałbym uzyskać to

The directory "D:\xampp\htdocs\med-app\app\app\cache\dev/jms_diextra/metadata" does not exist. 

Gdybym nie użyłby tego wiązkę będę się inny problem z cache Nauki. Pojawia się przy każdym dostępie do strony, dopóki nie usunę cache ponownie BEZ dostępu do strony. całkowicie blokuje dostęp do strony internetowej i czyni ją niefunkcjonalną.

A co z rozgrzewką? To też trochę potrwa. Co się stanie, jeśli ktoś uzyska dostęp do strony internetowej podczas rozgrzewania pamięci podręcznej? Czy to też nie powoduje konfliktu?

Jak rozwiązać ten problem? Czy muszę zamknąć usługę Apache, wyczyścić i ogrzać pamięć podręczną, a następnie ponownie uruchomić apache? W jaki sposób jest to obsługiwane przy tworzeniu witryny internetowej?

EDYTOWANIE Coś interesującego, co odkryłem. Błąd występuje, gdy usuwam folder cache/prod. Jeśli usunę zawartość folderu bez usuwania samego folderu, wygląda na to, że błąd nie występuje. Zastanawiam się dlaczego.

+0

Wolę usunąć pamięć podręczną za pomocą "sudo rm -rf app/cache/*" Myślę, że możesz skrócić czas, który zajmie dużo czasu –

+0

Podczas ręcznego czyszczenia pamięci podręcznej odświeżanie również musi być wykonane ręcznie, w przeciwnym razie odsyłaj komentarze @johnSmith, aby automatycznie odświeżyć je w krótszym czasie lub całkowicie je wyłączyć. – Anil

+0

Nie mogę użyć "rm", tak jak w Windowsie z xampp. –

Odpowiedz

4

Zazwyczaj dobrą praktyką jest zablokowanie strony internetowej w trybie konserwacji, jeśli wykonujesz aktualizacje lub czyszczenie pamięci podręcznej z dowolnego innego powodu w produkcji. Czasami usługi hostingowe mają tę opcję, aby obsłużyć to za Ciebie, lub istnieje nice bundle do obsługi obsługi z łatwością z wiersza poleceń.

W ten sposób można bezpiecznie usunąć pamięć podręczną i upewnić się, że nikt nie odwiedza strony i niepoprawnie ją przebudowuje.

+0

Sądzę, że istnieje również pakiet konserwacyjny z lexika. Czy poleciłbyś to także? W każdym razie, czy dostęp do stron konserwacji wygenerowanych przez ten pakiet próbuje pisać lub czytać z pamięci podręcznej? Ponieważ to nadal nie rozwiązałoby problemów. –

+0

Nie mam doświadczenia z pakietem leksykonu. 'CorleyMaintenanceBundle' ma dwa tryby, twardy i miękki. Szukasz twardego zamka, który działa na poziomie apache/nginx. Miękka blokada nadal będzie miała dostęp do pamięci podręcznej. –

3

Zwykle, jeśli musisz wyczyścić pamięć podręczną Symfony, oznacza to, że aktualizujesz ją do nowej wersji - nie tylko musisz wyczyścić pamięć podręczną, ale prawdopodobnie będziesz musiał zrzucić zasoby i wykonać inne zadania. W tym przypadku, co zrobiłem w przeszłości, który działał bardzo dobrze, traktuje każde wydanie produkcyjne jako swoją własną wersję n swojego własnego folderu - więc kiedy instalujesz nową wersję, robisz to bez połączenia z serwerem, a potem po prostu zmieniasz twój serwer WWW wskaże nową wersję, kiedy skończysz. Dodatkową korzyścią jest to, że jeśli coś zepsuć i trzeba wykonać wycofanie, wystarczy od razu połączyć się z poprzednią wersją.

Załóżmy, że twój config Apache ma DocumentRoot zawsze zwraca się do określonej lokalizacji:

DocumentRoot /var/www/mysite/web 

byłbyś tym katalogu dowiązania symbolicznego do najnowszej wersji:

/var/www/mysite/web -> /var/www/versions/1.0/web 

Teraz, że masz wersja 1.1 witryny do zainstalowania. Wystarczy zainstalować ją na /var/www/versions/1.1 - umieścić kod tam zainstalować swoje aktywa, zaktualizuj pamięci podręcznej, itp Następnie wystarczy zmienić dowiązanie symboliczne:

/var/www/mysite/web -> /var/www/versions/1.1/web 

Teraz jeśli strona wywala potwornie można po prostu wskazać dowiązania powrotem. Zaletą jest to, że nie ma przestojów w witrynie i można łatwo ją wycofać, jeśli popełnisz błąd. Aby to zautomatyzować, używam skryptu bash, który instaluje nową wersję i aktualizuje dowiązania symboliczne serią komend połączonych za pomocą &&, więc jeśli jeden z etapów instalacji się nie powiedzie, cała instalacja zakończy się niepowodzeniem i nie utkniesz między wersją limbo.

Prawdopodobnie istnieją lepsze sposoby na wykonanie wszystkich powyższych czynności lub sposoby dalszej automatyzacji, ale chodzi o to, że jeśli zmieniasz produkcję, będziesz chciał przeprowadzić instalację/instalację Symfony, nie pozwalając użytkownikom na ingerowanie w to. .

+0

Hm, zastanawiam się, czy można to zrobić również z Capifony. Czy jednak serwer nie jest zbyt rozdęty? Musisz skopiować wszystkie obrazy i pliki "web" dla każdej wersji. –

+0

Tak, to z pewnością może być problem. Mam na myśli to, że moje strony zwykle nie używają praktycznie żadnych obrazów, więc ogólny ślad jest naprawdę mały, i nie trzymam dziesiątek poprzednich wersji ani nic, tylko najnowsze 2 lub 3. Jestem pewien, że Capifony byłoby dobrym rozwiązaniem. ..depozycja jest mniejszym z moich rzeczy i staram się to zrobić tak szybko, jak to możliwe, więc mogę skupić się na rozwoju. –