Na het upgraden van de rails-applicatie van ons team naar 4.2, zoals de release-opmerkingvermeld, wordt de standaard ip rails server
waarnaar wordt gebonden gewijzigd in localhost
van 0.0.0.0
.
We ontwikkelen met Vagrant en willen dat de ontwikkelserver rechtstreeks toegankelijk is vanuit de browser op de hostcomputer.
In plaats van vanaf nu elke keer rails s -b 0.0.0.0
te typen, vraag ik me af of er een elegantere oplossing is, zodat we nog steeds sth kunnen gebruiken zo eenvoudig als rails s
om de server te starten. Misschien:
- een configuratiebestand
rails s
leest waar ik de standaard binding-ip kan wijzigen (zonder-c
te gebruiken) - port forward met zwerver (geprobeerd maar mislukt, zie probleem hieronder)
- een aap-patch om te rekken, die de standaard bindings-ip verandert
Het echte doel hierachter is dat ik wil dat de upgrade soepel verloopt binnen ons team, waarbij ik de storing vermijd dat mensen hun rails-server voortdurend opnieuw moeten opstarten vanwege de ontbrekende -b 0.0.0.0
onderdeel.
Ik heb zwervende port forwarding geprobeerd, maar krijg nog steeds Connection Refused
wanneer ik localhost:3000
op de hostcomputer bezoek. De twee configuratieregels die ik probeerde waren:
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000
Geen relevante instructies gevonden in de officiële documenten. Alle hulp wordt op prijs gesteld.
Antwoord 1, autoriteit 100%
Ik heb hetzelfde probleem hier en ik heb vandaag een betere oplossing gevonden. Voeg deze code gewoon toe aan je config/boot.rb en het zou moeten werken met zwerver.
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
ps: het is gebaseerd op: dit antwoord
Antwoord 2, autoriteit 65%
U kunt foremangebruiken om een Procfile
uit te voeren met uw aangepaste opdrachten:
# Procfile in Rails application root
web: bundle exec rails s -b 0.0.0.0
Start nu uw Rails-applicatie met:
foreman start
Het goede aan voorman is dat je andere applicaties aan het Procfile kunt toevoegen (zoals sidekiq, mailcatcher).
Het slechte van de voorman is dat je je team moet trainen om foreman start
uit te voeren in plaats van rails s
.
Antwoord 3, autoriteit 25%
Heb hetzelfde probleem ondervonden. De blog gevonden Make Rails 4.2-server luistert naar alle interfaces.
Voeg het volgende toe aan config/boot.rb
require 'rails/commands/server'
module Rails
class Server
alias :default_options_bk :default_options
def default_options
default_options_bk.merge!(Host: '0.0.0.0')
end
end
end
Antwoord 4, autoriteit 17%
Voor Rails 5.1.7 met Puma 3.12.1 werkt het geselecteerde antwoord niet, maar ik heb het bereikt door het volgende toe te voegen aan mijn bestand config/puma.rb
:
set_default_host '0.0.0.0' # Note: Must come BEFORE defining the port
port ENV.fetch('PORT') { 3000 }
Ik heb dit vastgesteld door het dsl-bestandte inspecteren . Het gebruikt instance_eval
voor dat bestand, dus er zijn waarschijnlijk andere manieren om het te doen, maar dit leek mij het meest redelijk.
Antwoord 5, autoriteit 10%
Als je de standaardopties op config/boot.rb
zet, falen alle commandokenmerken voor rake en rails (voorbeeld: rake -T
of rails g model user
)!Dus, voeg dit toe aan bin/rails
na regel require_relative '../config/boot'
en de code wordt alleen uitgevoerd voor het commando rails server:
if ARGV.first == 's' || ARGV.first == 'server'
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
end
Het bestand bin/rails
ziet er als volgt uit:
#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
# Set default host and port to rails server
if ARGV.first == 's' || ARGV.first == 'server'
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
end
require 'rails/commands'
Antwoord 6
Hier is een eenvoudigere oplossing die ik gebruik. Ik vind dotenven puma-heroku, dus als het gebruik ervan niet voor jou werkt, is dit misschien niet iets voor jou.
/config/puma.rb
plugin :heroku
Gemfile
gem 'dotenv-rails', groups: [:development, :test]
.env
PORT=8080
Nu kan ik zowel de ontwikkeling als de productie starten met rails s
.
Antwoord 7
Als u docker of een andere tool gebruikt om de omgevingsvariabelen te beheren, kunt u de omgevingsvariabele HOST
instellen op het IP-adres dat u moet binden.
Voorbeeld:
HOST=0.0.0.0
Voeg het toe aan het bestand docker.env
als u Docker gebruikt of .env
als u voorman gebruikt.
Antwoord 8
Voor Rails 5 met Puma werkt het geselecteerde antwoord niet. U kunt een dergelijke foutmelding krijgen: cannot load such file -- rails/commands/server
Voeg voor de juiste oplossing het volgende toe aan config/puma.rb
:
bind 'tcp://0.0.0.0:3000'
Antwoord 9
Schakel over naar Pumaen specificeer port
in config/puma.rb
, bijv.:
port ENV.fetch("PORT") { 3000 }
Blijkbaar zal het binden aan 0.0.0.0 voor de gespecificeerde poort: https://github. com/puma/puma/issues/896