Nginx i ucinanie plików JS

Nowa praca ma to do siebie, że człowiek ma możliwość wykorzystać w praniu nowe technologie – często także takie, z którymi nie miał wcześniej w ogóle do czynienia. W ten oto sposób zacząłem używać Vagranta, Kohanę, Nginxa… właśnie Nginx… Z serwerem tym nie miałem nigdy wcześniej do czynienia i zdarzały się parę razy, że miałem problem dogadaniem się z towarzyszem Nginixem. Nie było to jednak nic czego bym się nie spodziewał – aż do dzisiaj.

Co się właściwie stało?

Wszystko wyglądało na początku normalnie. Postawiłem sobie na Vagrancie zestaw składający się z PHP, Ubuntu, MySql i Nginxa. Sam projekt wykorzystywał Kohane i Angulara. Wszystko szło dobrze do momentu aż nie musiałem zmodyfikować pliku js. Nagle się okazało, że pliki js, które zmodyfikowałem trafiają do przeglądarki niekompletne – brakuje pół a czasem kilku linijek kodu.

Informacje jakie znalazłem w Google na ten temat sugerowały, że to może być przyczyna jakiegoś dziwnego znaku na końcu pliku albo kodowania – jednak ta hipoteza w moim przypadku się nie sprawdziła. Nie sprawdziło się także kilka innych wersji wydarzeń jakie znalazłem w Google a także te sugerowane przez kolegów, którym (ja jakże ;)) wszystko działało prawidłowo.

I jak to się skończyło?

 W końcu zacząłem szukać informacji o podobnym błędzie ale konkretnie pod kontem Nginxa. Po chwili trafiłem post zamieszczony na blogu Conroy.com poświęcony podobnemu zagadnieniu. Autor tego postu napisał, że aby rozwiązać ten problem należy w pliku nginx.conf ustawić parametr sendfile z on (domyślne ustawienie) na off. Po zastosowaniu się do zaleceń i zresetowaniu serwera wszystko zaczęło działać poprawnie.

Ale dlaczego właśnie tak?

To, że rozwiązałem problem to jedno a to co było przyczyną to drugie. Zgodnie z tym co pisze autor tego posta parametr sendfile odpowiada za to czy serwer będzie wykorzystywał do odczytywania plików funkcję sendfile znajdującą się w jądrze systemów uniksowych. Jest to mechanizm szybszy od standardowych rozwiązań jednak ta funkcja nie działa prawidłowo gdy system zostanie uruchomiony na… wirtualnej maszynie 😉

I to tyle na dzisiaj – mam nadzieję, że tą krótką historią zaoszczędziłem któremuś z Was trochę czasu.

Posty które mogą Cię zainteresować:

4 Responses to Nginx i ucinanie plików JS
  1. Mikołaj Jeziorny Odpowiedz

    Cześć,
    Patrz co znalazłem 🙂
    https://docs.vagrantup.com/v2/synced-folders/virtualbox.html

    • Michał Janicki Odpowiedz

      😉 Taa – mój problem polegał na tym że nie miałem zielonego pojęcia, że to może chodzić o sendfile a całą sprawę komplikowało to że chodziło tylko o pliki JS. Szukałem więc rozwiązania dokładnie pod tym kontem i znalazłem to co opisałem. Nie natknąłem się akurat na ten fragment dokumentacji. Trzeba będzie dokładniej się z nią w przyszłości zapoznać 😉

  2. D. Janicki Odpowiedz

    Jeśli chodzi o wirtualne maszyny, to z poważniejszymi projektami bym nie ryzykował. Nawet takie Azure ma problemy czasem ze stabilnością i wychodzi potem milion różnych problemów.

    • Michał Janicki Odpowiedz

      Zależy co dokładnie masz na myśli. Jeśli chodzi Ci o hosting – to ja się w tym temacie nie będę wypowiadał. Jeśli chodzi natomiast o środowisko developerskie to wirtualne maszyny są niezastąpione głównie dlatego, że można odwzorować niemal dokładnie środowisko produkcyjne, w którym uruchomiona zostanie aplikacja.

Odpowiedz na „Michał JanickiAnuluj pisanie odpowiedzi

Your email address will not be published. Please enter your name, email and a comment.