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


164

개발 시스템에서 포트 10524를 사용합니다. 따라서 다음과 같이 서버를 시작합니다.

rails s -p 10524

서버를 시작할 때마다 포트를 추가 할 필요가 없도록 기본 포트를 10524로 변경하는 방법이 있습니까?


1
config/puma.rb기본 퓨마 서버를 실행하는 경우 간단한 답변 편집
khaverim

답변:


132

먼저 보석 경로에서 아무것도 편집하지 마십시오! 그것은 모든 프로젝트에 영향을 미치며 나중에 많은 문제가 발생할 것입니다 ...

프로젝트에서 다음과 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

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


14
또는 별명! alias rs='rails server -p 10524'
trisweb

2
require 'rails/commands'붙여 넣은 새 항목
뒤에 붙여야

나를 위해 작동하지 않습니다, 여전히 : 3000에서 시작합니다. However @Spencer 솔루션 (이 페이지의)
Roman

한 경우에는 나를 위해 일했지만 다른 것은 아니 었습니다. 나 자신의 스크립트 폴더와 레일 파일을 만들어야 할 때-> 큰 성공하지 못했습니다. 레일이 스크립트에서 실행 중인지 여부와 관련이 있습니까?
안부

@trisweb 작성 방법을 설명해 주시겠습니까 alias rs
Selvamani

131

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

8
super별칭 해킹 대신 사용하십시오 .
Nowaker

2
불행하게도 super별명 대신에를 사용하면 잘못된 메소드를 호출합니다. ::Rack::Serverdefault_options 버전을 호출합니다 .
codingFoo

3
ruby 2.0 prepend에서는을 사용하는 대신 익명 모듈을 사용할 수 alias있습니다. 이것으로을 깨끗하게 사용할 수 있습니다 super.
exexary

2
이 답변은 Rails::Server상황에 따라 정해지지 않아야합니다 (예 : Rails 콘솔 실행). 따라서으로 application.rb보호 된 끝에 코드를 넣는 것이 좋습니다 if defined?(Rails::Server).
XåpplI'-I0llwlg'I-

29

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

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

rake start대신에 전화rails server


16

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을 가리 킵니다.
Joshua Muheim

여기에 관련된 질문을 추가했습니다 : stackoverflow.com/questions/29431315/…
Joshua Muheim

7

우리는 Puma를 웹 서버로 사용 하고 개발 환경 변수를 설정하기 위해 dotenv 를 사용하고 있습니다. 이것은에 대한 환경 변수를 PORT설정하고 Puma 구성에서 참조 할 수 있음을 의미 합니다.

# .env
PORT=10524


# config/puma.rb
port ENV['PORT']

그러나 foreman start대신 앱을 시작해야합니다.rails s . 그렇지 않으면 puma 구성이 제대로 읽히지 않습니다.

개발 및 프로덕션에서 구성이 동일한 방식으로 작동하기 때문에이 방법이 마음에 듭니다. 필요한 경우 포트 값만 변경하면됩니다.


4

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의 다른 모든 구성 은 여전히 ​​설정되어 있으며 명령 줄 스위치는 여전히 기본값을 재정의합니다.


3

레일 솔루션 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'

감사! 나는 레일이있는 솔루션을 찾기 위해 여기에왔다 2.3.18 :-)
Prakash Murthy

작동 require File.dirname(__FILE__) + '/../config/boot'하기 전에 이전 을 옮겨야 require 'rack/handler'했습니다.
Prakash Murthy

1

을 설치 $ 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
...
...

건배


-4

지정된 포트로 명령을 위해 쉘에 별명을 작성하십시오.


12
gem 경로에서 파일을 편집하는 것은 ... 용감한 사람에게만 해당됩니다. 그것은 보석 업데이트에서 살아남지 못할 것입니다, 그것은 더 많은 컴퓨터 등에서 작동하지 않을 것입니다. 나는 정말로 그것을 추천하지 않을 것입니다
Radek

2
네 말이 맞아 귀하의 솔루션이 훨씬 좋습니다. 나는 그것을 재정의 할 수 있다는 것을 몰랐다 script/rails. 고마워
캐주얼 코더
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.