Używamy Capistrano zatrudnić podobną konfigurację. Jednak natrafiliśmy na kilka problemów:
Po przełączeniu do konfiguracji wszystko wyglądało dobrze, ale potem zaczęliśmy zauważać, że po uruchomieniu cap deploy
, mimo że dowiązanie symboliczne zostało zmienione tak, aby wskazywało na głowę rewizja, przeglądarka nadal będzie wyświetlać stare strony, nawet po wielu odświeżeniach i dołączaniu różnych parametrów GET.
Najpierw pomyśleliśmy, że to buforowanie przeglądarki, więc dla rozwoju wyłączyliśmy buforowanie przeglądarki przez nagłówki HTTP, ale to niczego nie zmieniło. Następnie sprawdziłem, aby upewnić się, że nie robimy buforowania strony po stronie serwera, a my nie. Zauważyłem jednak, że gdybym usunął plik w wersji, do której wskazywałby dowiązanie symboliczne, otrzymalibyśmy plik 404, więc Apache wyświetlał nowe strony, ale nadal śledził "stare dowiązanie symboliczne" i wyświetlał strony od zły katalog.
To jest udostępniony hosting, więc nie mogłem ponownie uruchomić Apache. Próbowałem więc usunąć dowiązanie symboliczne i utworzyć za każdym razem nowe. Wydawało się, że działa to niekiedy niezawodnie. Działało prawdopodobnie 25 ~ 50% czasu.
końcu, okazało się, że jeśli:
- usunięty istniejący symlinka (usunięcie go lub jej zmiany nazwy);
- złożyła wniosek strony, powodując Apache próbować rozwiązać dowiązania ale uważają, że brakuje (w wyniku czego 404)
- następnie stworzył nową dowiązania do nowego katalogu
spowodowałoby to ten docroot do być odpowiednio aktualizowany przez większość czasu.Jednak nawet to nie jest doskonałe, a około 2-5% czasu, gdy skrypt wdrażania miał wget
, aby pobrać stronę zaraz po zmianie nazwy starego dowiązania symbolicznego, zwrócił starą stronę zamiast 404.
Wygląda na to, że Apache albo buforuje system plików, albo może komenda mv
zmieniła tylko system plików w pamięci, podczas gdy Apache czytał z systemu plików na dysku (tak naprawdę nie ma żadnego sensu). W obu przypadkach podjąłem czyjeś zalecenie do uruchomienia sync
po zmianie dowiązania symbolicznego, co powinno spowodować zsynchronizowanie systemu plików z pamięcią, a być może niewielkie opóźnienie również pomoże wget
zwrócić 404.
I "m myśli" rm/var/www/html/finalbuild && ln -s/home/user/build4/var/www/html/finalbuild ". Możesz nawet nie potrzebować restartować Apache. – barrycarter
dziękuję, zmieniłem docroot i wskazałem na dowiązanie symboliczne, ale Apache nie wydaje się słuchać ... Znowu uruchomiłem Apache pomyślnie, jakieś pomysły? – Jorre
Próbuję również znaleźć odpowiedź na to. Apache podaje mi błąd 403. Do tej pory nie było szczęścia. Prawdopodobnie dlatego, że jest to zła praktyka w produkcji. Po prostu chcę to zrobić na moim dev polu. – nedned