2013-07-16 10 views
13

ottengo il seguente errore durante il tentativo di eseguire "cap production unicorn:start"Impossibile collegarsi alla porta 80, ma in esecuzione sulle opere shell corrente senza problemi

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) 

eseguendo il seguente comando manualmente, funziona senza problemi . Quale potrebbe essere il problema qui?

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

risposta

8

È necessario accesso root per collegarsi alle porte inferiori come porto 80. Il comando rvmsudo viene eseguito nel contesto root e quindi funziona.

L'attività di protezione viene eseguita in un contesto utente normale (probabilmente distribuito) a seconda della configurazione. È necessario aggiungere la capacità di sudo per limitare l'implementazione dell'utente e assicurarsi che l'attività cap utilizzi sudo per avviare unicorn.

7

Risposta di @Iuri G. offre ragionamento e possibile soluzione.

Ho un altro suggerimento, a meno che tu non abbia una ragione estremamente convincente per eseguire Unicorn con la porta 80, cambialo in una porta superiore (> 1024), come 3000. Questo risolverà il tuo problema.

Se si tratta di un'applicazione esposta al pubblico, è troppo facile sommergere Unicorn e rendere l'applicazione non disponibile per gli utenti finali. In tal caso, metti Unicorn dietro un proxy (come Nginx). Il proxy sarà sulla porta 80 e Unicorn su una porta superiore.

1

Suppongo che tu stia utilizzando Ubuntu come server di produzione. Sul server è necessario modificare il sudoers del file:

Primo tipo select-editor e selezionare nano (o un altro editor sentire comodi con)

Poi alla fine del file, prima della linea include, aggiungere questa riga :

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

È necessario sostituire deployer dal nome utente che si sta utilizzando con Capistrano, e di sostituire /path/to/your/unicorn_rails con il suo percorso corretto. Ciò consentirà all'utente del deployer di "sudo unicorn_rails" senza richiedere una password.

Infine modificare i tuoi unicorn:start compito Capistrano, e aggiungere rvmsudo avanti rispetto alla riga di comando che avvia unicorno:

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

Se non funziona si può provare questo invece

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

@Bejamin entrambi i comandi non funziona per me – krs

4

nel mio sviluppo ambiente, usando RubyMine, mi sono imbattuto in questo recentemente.

ho usato SSH per reindirizzare la porta 80 per 8080.

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

funzionato perfettamente! Ricorda solo che il tunnel sarà vivo fino a quando non lo uccidi/riavvia il computer. – fgblomqvist

Problemi correlati