릴리스 노트에서 언급했듯이 우리 팀의 레일 애플리케이션을 4.2로 업그레이드 한 후 기본 ip rails server
바인딩이 localhost
에서 0.0.0.0
.
우리는 Vagrant로 개발하고 호스트 머신의 브라우저에서 직접 개발 서버에 액세스 할 수 있기를 원합니다.
rails s -b 0.0.0.0
지금부터 매번 타이핑하는 대신 , 더 우아한 해결책이 있는지 궁금합니다. 그래도 rails s
서버를 시작하는 것처럼 간단하게 sth를 사용할 수 있습니다 . 혹시:
- 구성 파일
rails s
은 기본 바인딩 IP를 수정할 수있는 위치를 읽습니다 (사용하지 않음-c
). - 방랑자와 함께 포트 포워드 (시도했지만 실패했습니다. 아래에서 발생한 문제 참조)
- 랙에 원숭이 패치, 기본 바인딩 IP 변경
이것의 진정한 목표는 사람들이 -b 0.0.0.0
부품 누락으로 인해 레일 서버를 지속적으로 다시 시작해야하는 결함을 피하면서 우리 팀 사이에서 원활하게 업그레이드하기를 원한다는 것 입니다.
방랑 포트 포워딩을 시도했지만 호스트 컴퓨터를 Connection Refused
방문하면 여전히 나타납니다 localhost:3000
. 내가 시도한 두 가지 구성 줄은 다음과 같습니다.
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000
공식 문서에서 관련 지침을 찾지 못했습니다. 어떤 도움을 주시면 감사하겠습니다.
답변
나는 여기에서 같은 문제를 겪고 있으며 오늘 더 나은 해결책을 찾았습니다. 이 코드를 config / boot.rb에 추가하면 vagrant와 함께 작동합니다.
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
추신 : 기반 : 이 답변
답변
foreman 을 사용 Procfile
하여 사용자 지정 명령으로 a를 실행할 수 있습니다 .
# Procfile in Rails application root
web: bundle exec rails s -b 0.0.0.0
이제 다음과 같이 Rails 애플리케이션을 시작합니다.
foreman start
foreman의 좋은 점은 (sidekiq, mailcatcher와 같은) Procfile에 다른 응용 프로그램을 추가 할 수 있다는 것입니다.
감독의 나쁜 점은 팀 foreman start
이 rails s
.
답변
같은 문제를 만났습니다. Make Rails 4.2 서버가 모든 인터페이스를 수신 하는 블로그를 찾았습니다 .
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
답변
Puma 3.12.1이 설치된 Rails 5.1.7의 경우 선택한 답변이 작동하지 않지만 config/puma.rb
파일에 다음을 추가하여 완료했습니다 .
set_default_host '0.0.0.0' # Note: Must come BEFORE defining the port
port ENV.fetch('PORT') { 3000 }
dsl 파일 을 검사하여 이것을 결정했습니다 . instance_eval
해당 파일을 사용 하므로 다른 방법이있을 수 있지만 이것이 나에게 가장 합리적으로 보였습니다.
답변
기본 옵션을 설정 config/boot.rb
하면 rake 및 rails에 대한 모든 명령 속성이 실패합니다 (예 : rake -T
또는 rails g model user
)! 따라서 이것을 bin/rails
줄 뒤에 추가 require_relative '../config/boot'
하면 코드는 rails 서버 명령에 대해서만 실행됩니다.
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/rails
파일은 다음과 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'
답변
제가 사용하고있는 더 간단한 솔루션이 있습니다. 나는 이미 dotenv 및 puma-heroku를 좋아 / 필요 하므로 이들을 사용하는 것이 효과가 없다면 이것은 당신에게 적합하지 않을 수 있습니다.
/config/puma.rb
plugin :heroku
Gemfile
gem 'dotenv-rails', groups: [:development, :test]
.env
PORT=8080
이제 개발과 프로덕션을 모두 rails s
.
답변
로 전환 푸마 와 지정 port
의 config/puma.rb
예를 :
port ENV.fetch("PORT") { 3000 }
분명히 지정된 포트에 대해 0.0.0.0에 바인딩됩니다 : https://github.com/puma/puma/issues/896