WP Safe Updates – bezpieczne testowanie aktualizacji wtyczek

WordPress - aktualizacjeO konieczności regularnego aktualizowania używanych wtyczek nikomu chyba nie trzeba przypominać. W praktyce jednak zdarza się, że świadomie nie uaktualniamy niektórych rozszerzeń – najczęściej z obawy o problemy, jakie mogą wystąpić na naszej stronie po zainstalowaniu nowej wersji wtyczki. Dotyczy to głównie rozbudowanych rozszerzeń (takich jak na przykład WooCommerce), których aktualizacje zawierają mnóstwo zmian, w tym również takich, które mogą spowodować problemy z kompatybilnością z używanym przez nas motywem lub innymi wtyczkami.

Najprostszą metodą na sprawdzenie, co się stanie po aktualizacji rozszerzenia, jest zrobienie kopii całej strony i przetestowanie jej działania po wykonaniu uaktualnienia. Jest to sposób stosunkowo łatwy, a jeśli kopię zrobimy na tym samym serwerze, to mamy praktycznie stuprocentową pewność, że wszystko będzie działać dokładnie tak samo, jak na naszej „prawdziwej” stronie.

Co jednak, gdy nie możemy lub nie umiemy wykonać kopii strony, a liczba wtyczek wymagających uaktualnienia zaczyna spędzać nam sen z powiek? Wtedy z pomocą może przyjść wtyczka WP Safe Updates, która pozwoli nam przetestować aktualizację dowolnego rozszerzenia bezpośrednio na naszej stronie, bez obawy o to, że coś popsujemy.

Po instalacji (o której za chwilę) wtyczki przy każdym komunikacie o dostępnej aktualizacji pojawi się nowy link test update.

WP Safe Updates

Kliknięcie tego linku spowoduje utworzenie w tle kopii naszej bazy danych i zainstalowanych wtyczek, aktualizację wybranego rozszerzenia i przełączenie naszej strony w tryb testowy, widoczny tylko dla nas (pozostałe osoby odwiedzające naszą witrynę będą oglądać „normalną” jej wersję). O tym, że przeglądamy testową wersję strony, informuje nas widoczny u dołu okna przeglądarki czerwony pasek. Po zakończeniu testów możemy wyłączyć tryb testowy i (jeśli wszystko przebiegło pomyślnie) zaktualizować wtyczkę.

Brzmi świetnie, prawda? Niestety, nie ma róży bez kolców.

Instalacja wtyczki

Jak można przeczytać w dokumentacji, proces instalacji wtyczki nie należy do najłatwiejszych, szczególnie dla mniej zaawansowanych użytkowników. Musimy wkleić kawałek kodu do pliku wp-config.php, a następnie skopiować plik db.php z katalogu wtyczki do katalogu wp-content. Niby nic skomplikowanego, ale wymaga połączenia z serwerem przez (S)FTP lub SSH i ręcznego wykonania tych operacji. Na szczęście autor wtyczki ma to na uwadze i w przyszłych wersjach proces instalacji zostanie prawdopodobnie uproszczony.

Jednak największym problemem jest sam plik db.php. Za jego pomocą można stworzyć własny obiekt $wpdb, co (nie wdając się w techniczne szczegóły) pozwala na modyfikację jego metod lub dodanie własnych. W tym konkretnym przypadku autor korzysta z tego pliku, aby zmusić WordPressa do korzystania z wykonanej przez wtyczkę kopii bazy danych. Problem jednak w tym, że istnieją rozszerzenia (na przykład W3 Total Cache czy Query Monitor), które do działania wymagają swojej wersji tego pliku. A ponieważ (co oczywiste) może istnieć tylko jeden taki plik, to skorzystanie z WP Safe Updates razem z inną wtyczką używającą pliku db.php jest po prostu niemożliwe. Na szczęście autor zastanawia się nad pozbyciem się tego pliku z wtyczki, tak więc jest nadzieja, że coś się w tym temacie zmieni.

Jak to działa?

Po kliknięciu linku test update wtyczka tworzy katalog plugins_tmp_update, który jest kopią katalogu /wp-content/plugins/, a następnie kopiuje wszystkie tabele WordPressa (włącznie z dodanymi przez wtyczki) ze zmienionym prefiksem (na przykład z wp_ na wp_tmp_update_). Co ważne, wtyczki (poza tą aktualizowaną) nie są kopiowane do nowego katalogu, a jedynie tworzone są dla nich dowiązania symboliczne (symlink), co sprawia, że cały proces trwa znacznie krócej. Na koniec ustawiane jest ciasteczko o nazwie _alt_heap, które mówi WordPressowi, że ten konkretny użytkownik powinien widzieć kopię strony.

W większości przypadków cała ta operacja powinna przebiec bez problemów. Może się jednak zdarzyć, że w przypadku większych baz danych coś pójdzie nie tak (na przykład czas wykonywania operacji przekroczy dozwolony przez serwer czas wykonywania skryptu PHP). Na szczęście w takim przypadku nie ma powodów do paniki, bo nasza oryginalna strona nie jest przez wtyczkę w ogóle dotykana i nie stanie się z nią nic złego.

Testowałem wtyczkę WP Safe Updates na mojej testowej instalacji WordPressa, która jest nienaturalnie duża – jest tam 160 zainstalowanych wtyczek, a w bazie danych znajdują się 133 tabele i prawie 170 MB danych. Mimo to utworzenie przez wtyczkę wersji testowej trwało dosłownie kilka sekund i odbyło się bez żadnych problemów. Przetestowałem w ten sposób aktualizację WooCommerce z wersji 2.5 do 2.6 – zarówno samo uaktualnienie, jak i późniejsze „cofnięcie się” do poprzedniej wersji, odbyły się bezproblemowo.

Inne wady

Do wad wtyczki można zaliczyć to, że po wyłączeniu trybu testowego tymczasowe tabele w bazie danych i kopia katalogu wtyczek nie są usuwane – jest to robione dopiero podczas dezinstalacji rozszerzenia.

Drugą wadą (a raczej obszarem, który należałoby udoskonalić) jest fakt, że możemy testować aktualizację tylko jednej wtyczki na raz. Może to być problem gdy na przykład chcemy sprawdzić, czy z nową wersją wtyczki WooCommerce będzie działać nowa wersja jakiegoś dodatku.

Mimo wymienionych wyżej wad uważam, że koncepcja jest świetna i będę obserwował dalszy rozwój tego narzędzia. Pamiętajcie jednak, że rozszerzenie znajduje się wciąż w fazie testowej, w związku z tym nie polecam korzystania z niego w działających serwisach.

Bezpośredni link