2013-07-16 7 views
13

pojawia się następujący błąd podczas próby uruchomienia „cap production unicorn:startNie wiążą się z portu 80, ale działa w bieżących pracach powłoki bez żadnych problemów

F, [2013-07-12T04:36:18.134045 #28998] FATAL -- : error adding listener addr=0.0.0.0:80 
/home/ec2-user/apps/foo_prod/shared/bundle/ruby/2.0.0/gems/unicorn-4.6.3/lib/unicorn/socket_helper.rb:147:in `initialize': Permission denied - bind(2) (Errno::EACCES) 

ręcznie uruchamiając następującą komendę, działa bez żadnych problemów . Jaki może być problem?

rvmsudo unicorn_rails -c config/unicorn/production.rb -D --env production 

Odpowiedz

8

Trzeba dostępu użytkownika root wiążą się z niższymi portów jak porcie 80. Komenda rvmsudo jest wykonywana w kontekście root i dlatego działa.

Zadanie Cap wykonuje się w normalnym kontekście użytkownika (prawdopodobnie wdraża się) w zależności od konfiguracji. Powinieneś dodać funkcję sudo, aby zablokować użytkownika przy wdrażaniu i upewnij się, że twoje zadanie nakładkowe używa sudo do uruchomienia unicorn.

7

Odpowiedz przez @Iuri G. przedstawia uzasadnienie i możliwe rozwiązanie.

Mam inną sugestię, chyba że masz wyjątkowo przekonujący powód, by uruchomić Unicorn z portem 80, zmień to na wyższy port (> 1024), np. 3000. To rozwiąże twój problem.

Jeśli jest to aplikacja, która jest publicznie dostępna, zbyt łatwo jest przytłoczyć Unicorn i uczynić aplikację niedostępną dla użytkowników końcowych. W takim przypadku należy umieścić Unicorn za proxy (jak Nginx). Proxy będzie na porcie 80 i Unicorn na wyższym porcie.

1

Zakładam, że używasz Ubuntu jako serwera produkcyjnego. Na serwerze trzeba edytować plik sudoers:

Pierwszy typ select-editor i wybierz nano (lub inny edytor czujesz komfortowe i)

Następnie na dole pliku, przed linią include, dodać tę linię :

%deployer ALL=(ALL)NOPASSWD:/path/to/your/unicorn_rails 

trzeba zastąpić deployer przez nazwę użytkownika, której używasz z Kapistrana i zastąpić /path/to/your/unicorn_rails z prawidłowej ścieżki. Pozwoli to użytkownikowi twojego użytkownika na "sudo unicorn_rails" bez pytania o hasło.

Wreszcie edytować unicorn:start zadanie Kapistrana i dodać rvmsudo wyprzedzić linii poleceń, które zaczynają jednorożec:

rvmsudo unicorn_rails -c config/unicorn/production.rb -D --env production 

Jeśli to nie zadziała, możesz spróbować zamiast tego

bundle exec sudo unicorn_rails -c config/unicorn/production.rb -D --env production 
+0

@Bejamin obu komend nie działa dla mnie – krs

4

W moim rozwoju środowiska, używając RubyMine, wpadłem na to ostatnio.

użyłem SSH przekierowanie portu 80 do 8080.

sudo ssh -t -L 80:127.0.0.1:8080 [email protected] 
+0

doskonale działa! Pamiętaj tylko, że tunel będzie żywy, dopóki go nie zabijesz/nie uruchomisz ponownie komputera. – fgblomqvist

Powiązane problemy