[ruby-on-rails] 개발에서 Rails 3 서버 기본 포트를 변경하는 방법은 무엇입니까?

개발 시스템에서 포트 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

그러나이 솔루션에는 심각한 단점이 있습니다. 지루합니다.


답변

다음에 다음을 추가하고 싶습니다 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


답변

하나 더 당신을 위해. -p를 사용하여 rails 서버를 호출하는 레이크 작업을 만듭니다.

task "start" => :environment do
  system 'rails server -p 3001'
end

rake start대신에 전화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


답변

우리는 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'