Como executar rails s -p80 na porta 80?

87

Por padrão,

 rails s #running on 3000 port

Agora quero executá-lo na porta 80. Então, tentei:

 sudo rails -s -p80

Mas gerou um erro:

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

Usei o rvm para instalar o ruby ​​& rails. Parece que o rvm é especificado pelo usuário. Não é possível encontrar trilhos na raiz?

Eu também tentei o código abaixo:

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
fonte

Respostas:

212
rvmsudo rails server -p 80
iain
fonte
@pinouchon funciona porque rvmsudoo sudo mais o carregamento do rvm como sudo.
ia em
2
Se, como eu, você está usando rbenv ao invés de rvm, este plugin rbenv fará o equivalente: github.com/dcarley/rbenv-sudo
micapam
Seria mais arriscado se houvesse uma falha de segurança no RVM, visto que ele está sendo executado como root?
Kevin Chen
2
@Kevin Chen: Não em RVM, mas ficaria preocupado em rodar Rails como root. Na produção, você usaria Apache ou Nginx, que precisa de permissões de root para reivindicar a porta, mas é executado como um usuário especial. Minha solução é apenas testar coisas em desenvolvimento.
ia em
Eu cansei disso, mas obtive o socket.rb:206:in vínculo ': Endereço já em uso - bind (2) para 0.0.0.0:80 (Errno :: EADDRINUSE) `erro
r15
23

Basta encaminhar a solicitação da porta 80 para 3000 usando o comando abaixo:

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

Outra opção é:

rvmsudo rails server -p 80

No entanto, lembre-se de liberar esta porta do Apache ou outros serviços que a consomem normalmente. Além disso, não tenho certeza se dar permissão sudo para RVM pode ter algum problema de segurança ou não.

Dinesh Saini
fonte
Isso consumirá duas portas e não permitirá a execução de outra instância do Ruby na porta 3000.
Konstantin
Como você reverte isso? Funciona perfeitamente para mim, o que é ótimo, mas e se eu quiser desfazer o redirecionamento? Obrigado.
robins35,
precisa redefinir a tabela de rotas IP para o padrão
Dinesh Saini
1
Você pode reverter esse comando substituindo -Ipor -D, então sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. As respostas aqui fornecem mais detalhes: serverfault.com/questions/159544/undoing-port-forwarding .
bentrevor
8

Ia sugerir

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

mas ainda tenta usar o gemset global e não o gemset do projeto do RVM. Assim...

  1. Certifique-se de que o sshd esteja sendo executado em seu Mac. (Preferências do sistema => Compartilhamento => Login remoto verificado)
  2. Certifique-se de rails sestar executando na porta 3000 como seu usuário não root
  3. Abra um novo terminal e ...

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

(BTW, reduza as duplicatas a singulares na linha acima, não consigo descobrir como escapar isso corretamente aqui.)

O primeiro Password:é o seu rootusuário, o segundo é a senha de quem whoamiretorna.

Embora você provavelmente queira instalar o Phusion Passenger e configurá-lo em seu Apache local. A menos que você esteja apenas tentando demonstrar algo bem rápido e isso não seja uma solução permanente, é claro.

Cfeduke
fonte
certifique-se de usar /usr/bin/which railscaso rails tenha o
apelido
1

Se você estiver usando RVM e tiver feito a configuração padrão, não deve usar sudo.

Somente:

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

No entanto, 80 é uma porta privilegiada, portanto, você precisa executar como root e deve seguir as instruções para a instalação multiusuário do RVM.

Swanand
fonte
root é necessário para portas privilegiadas.
cfeduke
@cfeduke - Oh! Você está certo.
Swanand
@marimaf - A documentação amadureceu com o tempo. Aqui está o novo link: rvm.io/rvm/install
Swanand
Obrigado, isso ajuda a acessar uma VM MAC de um host de PC para testar um aplicativo Rails em que estou trabalhando. Nesse caso, eu tive que usar a opção -b (vincular) com o endereço IP da VM.
Tom T,
-1

você pode iniciar o servidor na porta 80

rails s -p 80

Se a porta 80 não ligar (outros processos não estão usando a porta 80).

uma
fonte
1
A porta abaixo de 1024 precisa de acesso root e você não pode executar o aplicativo até que não tenha configurado os trilhos via URL root. Eu implementei e testei.
Dinesh Saini