80 포트에서 레일 s -p80을 실행하는 방법은 무엇입니까?


87

기본적으로,

 rails s #running on 3000 port

이제 포트 80에서 실행하고 싶습니다. 그래서 시도했습니다.

 sudo rails -s -p80

그러나 오류가 발생했습니다.

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

rvm을 사용하여 루비 및 레일을 설치했습니다. rvm이 사용자 지정 인 것 같습니다. 루트에서 레일을 찾을 수 없습니까?

또한 아래 코드를 시도했습니다.

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

답변:


212
rvmsudo rails server -p 80

@pinouchon rvmsudosudo와 rvm을 sudo로로드 하기 때문에 작동합니다 .
iain

2
저처럼 rvm 대신 rbenv를 사용하고 있다면이 rbenv 플러그인은 다음과 같은 기능을 수행합니다. github.com/dcarley/rbenv-sudo
micapam

RVM이 루트로 실행되고 있다는 점을 감안할 때 RVM에 보안 허점이 있다면 더 위험할까요?
Kevin Chen

2
@Kevin Chen : RVM에서는 아니지만 Rails를 루트로 실행하는 것이 걱정됩니다. 프로덕션에서는 포트를 요청하기 위해 루트 권한이 필요하지만 특수 사용자로 실행되는 Apache 또는 Nginx를 사용합니다. 내 솔루션은 개발중인 것을 테스트하기위한 것입니다.
iain

나는 이것을 지 쳤지 만 socket.rb:206:in 바인딩을 얻는다 ': Address already in use-bind (2) for 0.0.0.0:80 (Errno :: EADDRINUSE)`error
r15

23

아래 명령을 사용하여 포트 80에서 3000으로 요청을 전달하십시오.

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

또 다른 옵션은 다음과 같습니다.

rvmsudo rails server -p 80

그러나이 포트를 정상적으로 사용하는 Apache 또는 기타 서비스에서이 포트를 해제해야합니다. 또한 RVM에 sudo 권한을 부여하는 데 보안 문제가 있는지 확실하지 않습니까?


이 두 개의 포트를 소비하는 것, 그리고 포트 3000의 다른 루비 인스턴스를 실행할 수 없습니다
콘스탄틴

이것을 어떻게 되돌릴 수 있습니까? 나에게 완벽하게 작동합니다. 훌륭하지만 리디렉션을 실행 취소하려면 어떻게해야합니까? 감사.
robins35

는 IP 라우팅 테이블을 재설정 할 필요가 기본값으로
네쉬 Saini에게

1
당신은 대체하여이 명령을 취소 할 수 있습니다 -I함께 -D그래서 sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. 여기에 대한 답변은 serverfault.com/questions/159544/undoing-port-forwarding 입니다.
bentrevor

8

제안하려고했다

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

하지만 여전히 RVM의 프로젝트 gemset이 아닌 전역 gemset을 사용하려고합니다. 그래서...

  1. sshd가 Mac에서 실행 중인지 확인하십시오. (시스템 환경 설정 => 공유 => 원격 로그인 확인)
  2. rails s루트가 아닌 사용자로 포트 3000에서 실행 중인지 확인하십시오.
  3. 새 터미널을 열고 ...

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

(BTW는 중복`를 위의 줄에서 단수로 줄입니다. 여기서 어떻게 적절하게 이스케이프하는지 알 수 없습니다.)

첫 번째 Password:root사용자이고 두 번째는 whoami반환 하는 사람의 비밀번호입니다 .

Phusion Passenger를 설치하고 로컬 Apache에서 설정하고 싶을 수도 있습니다. 당신이 무언가를 빠르게 시연하려고하는데 이것은 물론 영구적 인 해결책이 아니라면 말입니다.


당신이 사용 할 /usr/bin/which rails경우 레일에하는 별명이
david_adler

1

RVM을 사용하고 있고 기본 설정을 수행 한 경우 sudo.

다만:

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

그러나 80은 권한이있는 포트이므로 루트로 실행 해야 하며 RVM의 다중 사용자 설치 지침을 따라야합니다 .


권한이있는 포트에는 root가 필요합니다.
cfeduke

@cfeduke-오! 맞아요.
Swanand

@marimaf-문서는 시간이 지남에 따라 성숙해졌습니다. 여기에 새로운 링크는 다음과 같습니다 rvm.io/rvm/install
Swanand

감사합니다. PC 호스트에서 MAC VM에 액세스하여 작업중인 Rails 앱을 테스트하는 데 도움이됩니다. 이 경우 VM의 IP 주소와 함께 -b (바인딩) 옵션을 사용해야했습니다.
Tom T

-1

포트 80에서 서버를 시작할 수 있습니다.

rails s -p 80

포트 80이 바인딩되지 않는 경우 (다른 프로세스가 포트 80을 사용하지 않음).


1
1024 미만의 포트는 루트 액세스가 필요하며 루트 URL을 통해 레일을 설정하지 않을 때까지 애플리케이션을 실행할 수 없습니다. 나는 그것을 구현하고 테스트했습니다.
Dinesh Saini
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.