Depois de atualizar o aplicativo rails de nossa equipe para 4.2, conforme a nota de lançamento mencionada, o ip padrão rails server
vincula a é alterado para localhost
de 0.0.0.0
.
Nós desenvolvemos com o Vagrant e queremos que o servidor de desenvolvimento seja acessível diretamente do navegador na máquina host.
Em vez de digitar rails s -b 0.0.0.0
todas as vezes a partir de agora, gostaria de saber se existe alguma solução mais elegante, para que ainda possamos usar o sth tão simples quanto rails s
iniciar o servidor. Possivelmente:
- um arquivo de configuração
rails s
lê onde posso modificar o ip de ligação padrão (sem usar-c
) - port forward with vagrant (tentado mas falhou, veja o problema encontrado abaixo)
- um patch monkey para rack, que muda o ip de ligação padrão
O verdadeiro objetivo por trás disso é que eu quero que a atualização seja tranquila entre nossa equipe, evitando a falha que as pessoas terão que reiniciar constantemente seus servidores Rails devido à -b 0.0.0.0
parte faltando .
Eu tentei o encaminhamento de porta vagrant, mas ainda consigo Connection Refused
quando visito localhost:3000
na máquina host. As duas linhas de configuração que tentei foram:
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000
Não encontrou nenhuma instrução relevante nos documentos oficiais. Qualquer ajuda será apreciada.
fonte
HOST=0.0.0.0
, e o servidor de desenvolvimento do Rails usará automaticamente este valor.Respostas:
Estou com o mesmo problema aqui e hoje encontrei uma solução melhor. Basta anexar este código ao seu config / boot.rb e ele deve funcionar com o vagrant.
ps: é baseado em: esta resposta
fonte
Você pode usar foreman para executar um
Procfile
com seus comandos personalizados:Agora inicie seu aplicativo Rails com:
O bom do foreman é que você pode adicionar outros aplicativos ao Procfile (como sidekiq, mailcatcher).
A única coisa ruim sobre capataz é que você tem que treinar sua equipe para correr
foreman start
em vez derails s
.fonte
foreman s
também funcionará - pode ser uma transição mais fácil derails s
.Encontrou o mesmo problema. Encontrado o blog Make Rails 4.2 server escuta todas as interfaces .
Adicione o seguinte ao config / boot.rb
fonte
Se você colocar as opções padrão em
config/boot.rb
, todos os atributos de comando para rake e rails falharão (exemplo:rake -T
ourails g model user
)! Portanto, anexe issobin/rails
após a linharequire_relative '../config/boot'
e o código será executado apenas para o comando do servidor rails:O
bin/rails
arquivo está assim:fonte
Para Rails 5.1.7 com Puma 3.12.1 a resposta selecionada não funciona, mas consegui adicionando o seguinte ao meu
config/puma.rb
arquivo:Eu determinei isso inspecionando o arquivo dsl . Ele usa
instance_eval
naquele arquivo, então provavelmente há outras maneiras de fazer isso, mas essa me pareceu a mais razoável.fonte
Aqui está uma solução mais simples que estou usando. Eu já gosto / preciso do dotenv e do puma-heroku , então se usar esses não funcionar para você, talvez não seja para você.
/config/puma.rb
Gemfile
.env
Agora posso iniciar o desenvolvimento e a produção com
rails s
.fonte
Mudar para Puma e especificar
port
emconfig/puma.rb
, por exemplo:Aparentemente, ele se ligará a 0.0.0.0 para a porta especificada: https://github.com/puma/puma/issues/896
fonte
Se você usa docker ou outra ferramenta para gerenciar as variáveis de ambiente, pode definir a
HOST
variável de ambiente para o IP que você precisa vincular.Exemplo:
HOST=0.0.0.0
Adicione-o ao
docker.env
arquivo se você usar o Docker ou.env
se você usar o foreman.fonte
Para Rails 5 com Puma a resposta selecionada não funciona. Você pode obter esse erro:
cannot load such file -- rails/commands/server
Para uma solução adequada, adicione o seguinte a
config/puma.rb
:fonte