Come eseguire rails s -p80 su 80 port?


87

Per impostazione predefinita,

 rails s #running on 3000 port

Ora voglio eseguirlo sulla porta 80. Quindi ho provato:

 sudo rails -s -p80

Ma ha generato un errore:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo rails s -p80
sudo: rails: command not found

Ho usato rvm per installare ruby ​​& rails. Sembra che rvm sia specificato dall'utente. Non è in grado di trovare i binari nella radice?

Ho anche provato il codice seguente:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ which rails
/home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails
mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo /home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails s -p80

Risposte:


212
rvmsudo rails server -p 80

@pinouchon funziona perché rvmsudosudo e carica rvm come sudo.
iain

2
Se come me stai usando rbenv invece di rvm, questo plugin rbenv farà l'equivalente: github.com/dcarley/rbenv-sudo
micapam

Sarebbe più un rischio se ci fosse un buco di sicurezza in RVM, dato che è in esecuzione come root?
Kevin Chen

2
@Kevin Chen: Non in RVM, ma sarei preoccupato di eseguire Rails come root. In produzione useresti Apache o Nginx, che necessita dei permessi di root per richiedere la porta, ma funziona come un utente speciale. La mia soluzione è solo per testare le cose durante lo sviluppo.
iain

Mi sono stancato ma ottengo il socket.rb:206:in bind ': Indirizzo già in uso - bind (2) per 0.0.0.0:80 (Errno :: EADDRINUSE) `errore
r15

23

Basta inoltrare la richiesta dalla porta 80 alla 3000 utilizzando il comando seguente:

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000

Un'altra opzione è:

rvmsudo rails server -p 80

Tuttavia, ricordati di liberare questa porta da Apache o da altri servizi che la utilizzano normalmente. Inoltre, non sono sicuro che dare l'autorizzazione sudo a RVM possa avere problemi di sicurezza o no?


Ciò consumerà due porte e non consentirà di eseguire un'altra istanza di ruby ​​sulla porta 3000.
Konstantin

Come si inverte questo? Per me funziona perfettamente, il che è fantastico, ma cosa succede se voglio annullare il reindirizzamento? Grazie.
robins35

è necessario ripristinare l'impostazione predefinita della tabella di instradamento IP
Dinesh Saini

1
Puoi invertire questo comando sostituendo -Icon -D, quindi sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. Le risposte qui vanno più in dettaglio: serverfault.com/questions/159544/undoing-port-forwarding .
bentrevor

8

Stavo per suggerire

rails=`which rails` ; sudo $rails server -p 80

ma questo cerca ancora di utilizzare il gemset globale e non il gemset del progetto di RVM. Così...

  1. Assicurati che sshd sia in esecuzione sul tuo Mac. (Preferenze di sistema => Condivisione => Accesso remoto verificato)
  2. Assicurati che rails ssia in esecuzione sulla porta 3000 come utente non root
  3. Apri un nuovo terminale e ...

    me=``whoami``; sudo ssh -L 80:127.0.0.1:3000 -l $me -N localhost

(A proposito, riduci i duplicati a quelli singolari nella riga sopra, non riesco a capire come scappare correttamente qui.)

Il primo Password:è il tuo rootutente, il secondo è la password per chi whoamitorna.

Anche se probabilmente vorrai installare Phusion Passenger e configurarlo sotto il tuo Apache locale. A meno che tu non stia solo cercando di dimostrare qualcosa di molto veloce e questa non è una soluzione permanente, ovviamente.


assicurati di usarlo /usr/bin/which railsnel caso in cui rails sia alias
david_adler

1

Se stai usando RVM e hai eseguito l'impostazione predefinita, non dovresti usare sudo.

Appena:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ rails server -p 80

Tuttavia 80 è una porta privilegiata, quindi è necessario eseguire come root, e si avrà seguire le istruzioni per l'installazione multiutente di RVM.


root è richiesto per le porte privilegiate.
cfeduke

@cfeduke - Oh! Hai ragione.
Swanand

@marimaf - La documentazione è maturata nel tempo. Ecco il nuovo link: rvm.io/rvm/install
Swanand

Grazie, questo aiuta con l'accesso a una VM MAC da un host di PC per testare un'app rails su cui stavo lavorando. In quel caso, però, dovevo usare l'opzione -b (bind) con l'indirizzo IP della VM.
Tom T

-1

puoi avviare il server sulla porta 80

rails s -p 80

Se la porta 80 non si collega (altri processi non vengono utilizzati per la porta 80).


1
La porta inferiore a 1024 richiede l'accesso come root e non è possibile eseguire l'applicazione finché non si sono impostati i rails tramite l'URL root. L'ho implementato e testato.
Dinesh Saini
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.