Napisałem żonie prostą stronkę, chciałem przed dokończeniem jej wrzucić ją na serwer ale napotykam same problemy. Jak w końcu lokalnie udało mi się odpalić serwer w trybie produkcyjnym, to za chiny ludowe nie wiem dlaczego nie mogę na serwerze na digitalocean.
Tak jak ręczny deployment Django to jest sprawa balanalna, tak z railsami nie mogę sobie poradzić. Te co sobie stoi w django jest odpalane przez gunicorna.
Wszystko chodzi na końcie root’a. Nie ma tam nic ważnego i serwer jest tylko do developerki, testowania, zabawy i nauki. A production.log to w ogóle nie ma takiego pliku. Posprawdzam configi nginx jak tylko dziecko nakarmię i mi zaśnie.
Ok, sprawdz jeszcze w domyslnych logach nginx-a, /opt/nginx/logs/error.log (/opt moze byc inne, zalezy gdzie masz nginxka) - nginx (rails) jak nie ma dostepu do zdefiniowanych logow to tam wrzuca
Przy okazji sprawdz czy masz ustawiony secret_key_base dla production w pliku config/secrets.yml <- to jest jedna z rzeczy, ktora wywala na produkcji domyslny projekt, gdy nie jest skonfigurowana.
Tam nie szukałem logów, ale w końcu znalazłem przyczynę
[ 2014-08-31 10:43:59.0325 410/b6364b70 agents/HelperAgent/RequestHandler.h:2306 ]: [Client 20] Cannot checkout session because a spawning error occurred. The identifier of the error is d2e27870. Please see earlier logs for details about the error.
App 1248 stdout:
App 1248 stderr: *** ERROR ***: Cannot execute /root/.rbenv/versions/2.1.2/bin/ruby: Permission denied (13)
[ 2014-08-31 10:44:01.0465 410/b5b22b70 Pool2/Implementation.cpp:287 ]: Could not spawn process for application /_dev/www/iza: An error occurred while starting up the preloader. It exited before signalling successful startup back to Phusion Passenger.
Error ID: 100d8dd6
Error details saved to: /tmp/passenger-error-U01BCw.html
Message from application: An error occurred while starting up the preloader. It exited before signalling successful startup back to Phusion Passenger. Please read <a href="https://github.com/phusion/passenger/wiki/Debugging- application-startup-problems">this article</a> for more information about this problem.<br>
<h2>Raw process output:</h2>
<pre>
*** ERROR ***: Cannot execute /root/.rbenv/versions/2.1.2/bin/ruby: Permission denied (13)
</pre>
[ 2014-08-31 10:44:01.0524 410/b6364b70 agents/HelperAgent/RequestHandler.h:2306 ]: [Client 20] Cannot checkout session because a spawning error occurred. The identifier of the error is 100d8dd6. Please see earlier logs for details about the error.
Tylko teraz nie wiem dlaczego, bo /root/.rbenv/versions/2.1.2/bin/ruby istnieje i ma się dobrze, wszystko odpalam z roota więc dostęp powinien być…
Z resztą ps -aux:
root 407 0.0 0.3 5036 1744 ? Ssl 08:39 0:00 PassengerWatchdog
root 410 0.0 0.6 31936 3100 ? Sl 08:39 0:00 PassengerHelperAgent
nobody 415 0.0 0.6 12172 3348 ? Sl 08:39 0:00 PassengerLoggingAgent
root 425 0.0 0.1 7792 960 ? Ss 08:39 0:00 nginx: master process /usr/sbin/nginx
root 426 0.0 0.2 7940 1440 ? S 08:39 0:00 nginx: worker process
root 427 0.0 0.2 7940 1440 ? S 08:39 0:00 nginx: worker process
root 428 0.0 0.3 7940 1928 ? S 08:39 0:00 nginx: worker process
root 429 0.0 0.2 7940 1440 ? S 08:39 0:00 nginx: worker process
Generalnie proces nginx zwykle NIE działa z uprawnieniami roota, po starcie zmienia użytkownika na tego zdefiniowanego w nginx,conf. Sprawdź jaki tam jest uzytkownik i nadaj mu uprawnienia do plików.
Z tego co pamiętam nginx po prostu nie wystartuje jak spróbujesz ustawić uzytkownika na root
W ogóle uruchamianie czegokolwiek z prawami roota jest złym pomysłem. Nawet jeżeli to maszyna deweloperska to jak się ktoś do niej dostanie możesz zapłacić drogo za DDoSa którego z niej wyprowadzi ci ktoś. Znam osobiście jeden przypadek gdzie gość zapłacił 2000 dolarów prawie za transfer, więc nawet jak deweloperska maszyna do testów to nie stawiaj NIGDY nic na konice root, ucz się dobrych praktyk.
Pewnie masz rację, właśnie stawiam nową maszynę, instaluję wszystko po kolei i zobaczę czy się uda. Digitalocean ma tak rewelacyjne usługi i ceny że to pewnie będzie mniejszym kłopotem będzie wszystko przerzucić niż próbować naprawiać.