Jak uruchomić rails s -p80 na porcie 80?

87

Domyślnie,

 rails s #running on 3000 port

Teraz chcę go uruchomić na porcie 80. Spróbowałem więc:

 sudo rails -s -p80

Ale wyrzucił błąd:

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

Użyłem rvm do zainstalowania Ruby & Rails. Wygląda na to, że rvm jest określony przez użytkownika. Czy nie jest w stanie znaleźć szyn w katalogu głównym?

Wypróbowałem też poniższy kod:

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
mlzboy
źródło

Odpowiedzi:

212
rvmsudo rails server -p 80
iain
źródło
@pinouchon to działa, ponieważ rvmsudosudo plus ładuje rvm jako sudo.
innymi
2
Jeśli tak jak ja używasz rbenv zamiast rvm, ta wtyczka rbenv zrobi odpowiednik: github.com/dcarley/rbenv-sudo
micapam
Czy byłoby to większe ryzyko, gdyby RVM zawierał lukę w zabezpieczeniach, biorąc pod uwagę, że działa jako root?
Kevin Chen
2
@Kevin Chen: Nie w RVM, ale martwiłbym się uruchamianiem Railsów jako root. W produkcji używałbyś Apache lub Nginx, który potrzebuje uprawnień roota do przejęcia portu, ale działa jako specjalny użytkownik. Moje rozwiązanie służy tylko do testowania rzeczy w fazie rozwoju.
innymi
Zmęczyłem to, ale dostaję socket.rb:206:in powiązanie ': Adres już używany - bind (2) dla 0.0.0.0:80 (Errno :: EADDRINUSE) `error
r15
23

Po prostu prześlij żądanie z portu 80 do 3000 za pomocą poniższego polecenia:

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

Inną opcją jest:

rvmsudo rails server -p 80

Należy jednak pamiętać, aby zwolnić ten port od Apache lub innych usług, które normalnie używają tego portu. Ponadto nie jestem pewien, czy udzielenie pozwolenia sudo RVM może mieć jakiś problem z bezpieczeństwem, czy nie?

Dinesh Saini
źródło
Spowoduje to zużycie dwóch portów i nie pozwoli na uruchomienie kolejnej instancji ruby ​​na porcie 3000.
Konstantin
Jak to odwrócić? U mnie działa idealnie, co jest świetne, ale co jeśli chcę cofnąć przekierowanie? Dzięki.
robins35
trzeba zresetować tabelę tras IP do wartości domyślnych
Dinesh Saini
1
Możesz odwrócić to polecenie, zastępując -Iz -D, więc sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. Odpowiedzi tutaj są bardziej szczegółowe: serverfault.com/questions/159544/undoing-port-forwarding .
bentrevor
8

Miał zamiar zasugerować

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

ale to wciąż próbuje używać globalnego zestawu gemset, a nie projektu gemset z RVM. Więc...

  1. Upewnij się, że sshd działa na Twoim Macu. (System Prefs => Sharing => Remote Login zaznaczone)
  2. Upewnić się rails s działa na porcie 3000 jako użytkownik inny niż root
  3. Otwórz nowy terminal i ...

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

(Swoją drogą zredukuj zduplikowane znaki `` do liczby pojedynczej w powyższej linii, nie mogę dowiedzieć się, jak właściwie uciec przed tym tutaj).

Pierwsza Password:to Twój rootużytkownik, druga to hasło dla każdego, kto whoamiwraca.

Chociaż prawdopodobnie chcesz zainstalować Phusion Passenger i skonfigurować go pod lokalnym Apache. Chyba że próbujesz po prostu szybko zaprezentować coś naprawdę i nie jest to oczywiście trwałe rozwiązanie.

cfeduke
źródło
upewnij się, że używasz /usr/bin/which railsw przypadku, gdy szyny mają
aliasy
1

Jeśli używasz RVM i wykonałeś domyślną konfigurację, nie powinieneś używać sudo .

Właśnie:

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

Jednak port 80 jest uprzywilejowanym portem, więc musisz działać jako root i postępować zgodnie z instrukcjami instalacji RVM dla wielu użytkowników .

Swanand
źródło
dla portów uprzywilejowanych wymagany jest root.
cfeduke
@cfeduke - Oh! Masz rację.
Swanand
@marimaf - Dokumentacja z biegiem czasu dojrzała. Oto nowy link: rvm.io/rvm/install
Swanand
Dziękuję, to pomaga w uzyskaniu dostępu do maszyny wirtualnej MAC z komputera PC w celu przetestowania aplikacji railsowej, nad którą pracowałem. W tym przypadku jednak musiałem użyć opcji -b (bind) z adresem IP maszyny wirtualnej.
Tom T
-1

możesz uruchomić serwer na porcie 80

rails s -p 80

Jeśli port 80 nie łączy się (inne procesy nie używają portu 80).

uma
źródło
1
Port poniżej 1024 wymaga uprawnień administratora i nie możesz uruchomić aplikacji, dopóki nie skonfigurujesz railsów przez główny adres URL. Wdrożyłem i przetestowałem to.
Dinesh Saini,