Rails 4.2 geliştirme sunucusunun varsayılan bağlama ip'i nasıl değiştirilir?


89

Olarak, 4.2 ekibimizin raylar uygulamayı yükselttikten sonra sürüm notu söz, ip varsayılan rails serverbağlanarak onu olarak değiştirilir localhostdan 0.0.0.0.

Vagrant ile geliştiriyoruz ve geliştirme sunucusunun ana makinedeki tarayıcıdan doğrudan erişilebilir olmasını istiyoruz.

Bundan sonra rails s -b 0.0.0.0her seferinde yazmak yerine, daha zarif bir çözüm olup olmadığını merak ediyorum, böylece rails ssunucuyu başlatmak kadar basit bir şekilde sth kullanabiliriz . Belki:

  • bir yapılandırma dosyası rails s, varsayılan bağlama ipini (kullanmadan -c) değiştirebileceğim yeri okur
  • vagrant ile ileri bağlantı noktası (denendi ancak başarısız oldu, aşağıda karşılaşılan soruna bakın)
  • varsayılan bağlama ipini değiştiren rafa maymun yaması

Bunun arkasındaki asıl amaç, eksik -b 0.0.0.0parça nedeniyle insanların sürekli olarak ray sunucularını yeniden başlatmak zorunda kalacakları aksaklıktan kaçınarak, yükseltmenin ekibimiz arasında sorunsuz olmasını istememdir .

Serseri bağlantı noktası yönlendirmeyi denedim, ancak ana makineyi Connection Refusedziyaret ettiğimde yine de alıyorum localhost:3000. Denediğim iki yapılandırma satırı şuydu:

config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000

Resmi belgelerde ilgili herhangi bir talimat bulamadık. Herhangi bir yardım takdir edilecektir.



current rails 5 cevap Puma kullanmaktır
prusswan

Yine başka bir Rails 5 yanıtı: env değişkenini ayarlayın HOST=0.0.0.0ve Rails dev sunucusu bu değeri otomatik olarak kullanacaktır.
Topher Hunt

Yanıtlar:


72

Burada da aynı sorunu yaşıyorum ve bugün daha iyi bir çözüm buldum. Bu kodu config / boot.rb dosyanıza ekleyin ve vagrant ile çalışmalıdır.

require 'rails/commands/server'
module Rails
  class Server
    def default_options
      super.merge(Host:  '0.0.0.0', Port: 3000)
    end
  end
end

ps: Dayanmaktadır: bu cevap


1
Bu yaklaşımla, diğer varsayılanları kaybedersiniz . Bir alternatif için aşağıdaki Vanitas'ın cevabına bakın.
Mark Joseph Jorgensen

Katılıyorum, Vanita'nın cevabına bir göz atın
ringe

47

Foreman'ıProcfile özel komutlarınızla a çalıştırmak için kullanabilirsiniz :

# Procfile in Rails application root
web:     bundle exec rails s -b 0.0.0.0

Şimdi Rails uygulamanızı şununla başlatın:

foreman start

Foreman ile ilgili iyi olan şey, Procfile'a başka uygulamalar (sidekiq, mailcatcher gibi) ekleyebilmenizdir.

Foreman ile ilgili kötü olan şey, takımınızı koşmak foreman startyerine eğitmeniz gerektiğidir rails s.


Teşekkürler. En iyi çözüm olduğu ortaya çıkarsa, cevabınızı birkaç gün içinde kabul edeceğim :)
Huang Tao

Kısaltılmış foreman sda işe yarayacaktır - daha kolay bir geçiş olabilir rails s.
Eliot Sykes


9

Puma 3.12.1 ile Rails 5.1.7 için seçilen cevap çalışmıyor, ancak bunu dosyama aşağıdakileri ekleyerek başardım config/puma.rb:

set_default_host '0.0.0.0' # Note: Must come BEFORE defining the port

port ENV.fetch('PORT') { 3000 }

Bunu dsl dosyasını inceleyerek belirledim . Bu instance_evaldosya üzerinde kullanıyor , bu yüzden muhtemelen bunu yapmanın başka yolları da var, ama bu bana en mantıklı geldi.


Teşekkür ederim beni kurtardın
Proz1g

7

Varsayılan seçenekleri etkinleştirirseniz config/boot.rb, rake ve raylar için tüm komut nitelikleri başarısız olur (örnek: rake -Tveya rails g model user)! Bu nedenle, bunu bin/railssonraki satıra ekleyin require_relative '../config/boot've kod yalnızca rails sunucu komutu için yürütülür:

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

bin/railsDosyası şöyle loks:

#!/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'

1

İşte kullandığım daha basit bir çözüm. Zaten dotenv ve puma-heroku'yu seviyorum / buna ihtiyacım var , bu yüzden bunları kullanmak sizin için işe yaramazsa, o zaman bu sizin için olmayabilir.

/config/puma.rb

plugin :heroku

Gemfile

gem 'dotenv-rails', groups: [:development, :test]

.env

PORT=8080

Şimdi ile hem geliştirmeye hem de üretime başlayabilirim rails s.


1

Ortam değişkenlerini yönetmek için docker veya başka bir araç kullanıyorsanız, ortam değişkenini HOSTbağlamanız gereken IP'ye ayarlayabilirsiniz .

Misal: HOST=0.0.0.0

docker.envDocker kullanıyorsanız veya .envforeman kullanıyorsanız dosyaya ekleyin .


1

Puma ile Rails 5 için seçilen yanıt çalışmaz. Böyle bir hata alabilirsiniz:cannot load such file -- rails/commands/server

Doğru çözüm için aşağıdakileri ekleyin config/puma.rb:

bind 'tcp://0.0.0.0:3000'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.