개발 시스템에서 포트 10524를 사용합니다. 따라서 다음과 같이 서버를 시작합니다.
rails s -p 10524
서버를 시작할 때마다 포트를 추가 할 필요가 없도록 기본 포트를 10524로 변경하는 방법이 있습니까?
개발 시스템에서 포트 10524를 사용합니다. 따라서 다음과 같이 서버를 시작합니다.
rails s -p 10524
서버를 시작할 때마다 포트를 추가 할 필요가 없도록 기본 포트를 10524로 변경하는 방법이 있습니까?
답변:
먼저 보석 경로에서 아무것도 편집하지 마십시오! 그것은 모든 프로젝트에 영향을 미치며 나중에 많은 문제가 발생할 것입니다 ...
프로젝트에서 다음과 script/rails같이 편집 하십시오.
#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
APP_PATH = File.expand_path('../../config/application', __FILE__)
require File.expand_path('../../config/boot', __FILE__)
# THIS IS NEW:
require "rails/commands/server"
module Rails
class Server
def default_options
super.merge({
:Port => 10524,
:environment => (ENV['RAILS_ENV'] || "development").dup,
:daemonize => false,
:debugger => false,
:pid => File.expand_path("tmp/pids/server.pid"),
:config => File.expand_path("config.ru")
})
end
end
end
# END OF CHANGE
require 'rails/commands'
원칙은 간단합니다-서버 러너를 원숭이 패치하는 것이므로 하나의 프로젝트에만 영향을 미칩니다.
업데이트 : 예, bash 스크립트가 포함 된 간단한 솔루션이 있음을 알고 있습니다.
#!/bin/bash
rails server -p 10524
그러나이 솔루션에는 심각한 단점이 있습니다. 지루합니다.
alias rs='rails server -p 10524'
require 'rails/commands'붙여 넣은 새 항목
alias rs
다음에 다음을 추가하고 싶습니다 config/boot.rb.
require 'rails/commands/server'
module Rails
class Server
alias :default_options_alias :default_options
def default_options
default_options_alias.merge!(:Port => 3333)
end
end
end
super별칭 해킹 대신 사용하십시오 .
super별명 대신에를 사용하면 잘못된 메소드를 호출합니다. ::Rack::Serverdefault_options 버전을 호출합니다 .
prepend에서는을 사용하는 대신 익명 모듈을 사용할 수 alias있습니다. 이것으로을 깨끗하게 사용할 수 있습니다 super.
Rails::Server상황에 따라 정해지지 않아야합니다 (예 : Rails 콘솔 실행). 따라서으로 application.rb보호 된 끝에 코드를 넣는 것이 좋습니다 if defined?(Rails::Server).
Rails 4.0.4 (및 아마도 위로)에 대한 두 가지 이전 답변을 결합하면 다음과 같이 끝납니다 config/boot.rb.
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge({Port: 10524})
end
end
end
config.action_mailer.default_url_options. 그렇지 않으면 여전히 포트 3000을 가리 킵니다.
우리는 Puma를 웹 서버로 사용 하고 개발 환경 변수를 설정하기 위해 dotenv 를 사용하고 있습니다. 이것은에 대한 환경 변수를 PORT설정하고 Puma 구성에서 참조 할 수 있음을 의미 합니다.
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
그러나 foreman start대신 앱을 시작해야합니다.rails s . 그렇지 않으면 puma 구성이 제대로 읽히지 않습니다.
개발 및 프로덕션에서 구성이 동일한 방식으로 작동하기 때문에이 방법이 마음에 듭니다. 필요한 경우 포트 값만 변경하면됩니다.
Radek와 Spencer에서 영감을 받아 ... Rails 4 (.0.2-Ruby 2.1.0)에서 이것을 config / boot.rb에 추가 할 수있었습니다 :
# config/boot.rb
# ...existing code
require 'rails/commands/server'
module Rails
# Override default development
# Server port
class Server
def default_options
super.merge(Port: 3100)
end
end
end
default_options의 다른 모든 구성 은 여전히 설정되어 있으며 명령 줄 스위치는 여전히 기본값을 재정의합니다.
레일 솔루션 2.3- script/server:
#!/usr/bin/env ruby
require 'rack/handler'
module Rack::Handler
class << WEBrick
alias_method :old_run, :run
end
class WEBrick
def self.run(app, options={})
options[:Port] = 3010 if options[:Port] == 3000
old_run(app, options)
end
end
end
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/server'
require File.dirname(__FILE__) + '/../config/boot'하기 전에 이전 을 옮겨야 require 'rack/handler'했습니다.
을 설치 $ gem install foreman하고 foreman을 사용하여 원하는대로 서버를 시작할 수 있습니다 Procfile.
web: bundle exec rails -p 10524
자세한 내용은 https://github.com/ddollar/foreman 에서 foremangem 문서 를 확인할 수 있습니다 .
이 접근 방식의 장점은 설정에서 포트를 쉽게 설정 / 변경할 수있을뿐 아니라 추가 할 코드가 많이 필요하지 않을뿐만 아니라 Procfile감독자가 실행할 다른 단계를 추가 할 수 있다는 것입니다. 응용 프로그램을 시작할 때마다 다음과 같이 갈 필요는 없습니다.
bundle: bundle install
web: bundle exec rails -p 10524
...
...
건배
config/puma.rb기본 퓨마 서버를 실행하는 경우 간단한 답변 편집