開発でRails 3サーバーのデフォルトポートを変更する方法


164

私の開発マシンでは、ポート10524を使用しています。そのため、サーバーを次のように起動します。

rails s -p 10524

サーバーを起動するたびにポートを追加する必要がないように、デフォルトのポートを10524に変更する方法はありますか?


1
config/puma.rbデフォルトのプーマサーバーを実行している場合、簡単な答えは編集です
khaverim

回答:


132

まず、gemパスの何も編集しないでください!それはすべてのプロジェクトに影響し、後で多くの問題が発生します...

プロジェクトで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'

原則は単純です-サーバーランナーにサルパッチを当てているので、1つのプロジェクトにのみ影響します。

更新:はい、私はbashスクリプトを含むより簡単な解決策があることを知っています:

#!/bin/bash
rails server -p 10524

しかし、このソリューションには重大な欠点があります-それは地獄のように退屈です。


14
またはエイリアスです!alias rs='rails server -p 10524'
trisweb 2013

2
置くようにしてくださいrequire 'rails/commands'あなたが貼り新しいものAFTERそうでなければ、それはまだポート3000をしようとします。
CJBrew

私には機能しませんが、:3000から始まります。ハウバー@スペンサーソリューション(このページ)は機能します
ローマ14

あるインスタンスで働いたが別のインスタンスでは働いていない。独自のスクリプトフォルダーとrailsファイルを作成する必要があったとき->大成功ではありません。おそらく、レールがスクリプトから実行されているかどうかに関係していますか?
2014年

@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 2013年

2
残念ながら、superエイリアスの代わりにを使用すると、間違ったメソッドが呼び出されます。::Rack::Serverdefault_options のバージョンを呼び出します。
codingFoo

3
Ruby 2.0 prependでは、を使用する代わりに匿名モジュールを使用できますalias。これにより、をクリーンに使用できますsuper
2013年

2
この答えはRails::Server、本来あるべきではない(Railsコンソールの実行など)コンテキストで定義されることになります。したがってapplication.rb、で保護されたコードをの最後に置くことをお勧めしますif defined?(Rails::Server)
XåpplI'-I0llwlg'I -

29

あなたのためのもう一つのアイデア。-pを使用してRailsサーバーを呼び出すRakeタスクを作成します。

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

次にのrake start代わりに呼び出しますrails server


16

前の2つの回答を組み合わせると、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を指しています、
ジョシュアMuheim

:私はここにこれに関連する質問を追加stackoverflow.com/questions/29431315/...
ジョシュアMuheim

7

WebサーバーとしてPumaを使用し、開発時に環境変数を設定するためにdotenvを使用しています。これは、の環境変数を設定し、PORTそれをPuma構成で参照できることを意味します。

# .env
PORT=10524


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

ただし、foreman startではなくを使用してアプリを起動する必要があります。rails sそうしないと、プーマ構成が正しく読み取られません。

この方法が好きなのは、設定は開発と本番で同じように機能するため、必要に応じてポートの値を変更するだけです。


4

RadekとSpencerに触発されて... On 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

Rails 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 14

それが機能するためには、require File.dirname(__FILE__) + '/../config/boot'前に移動する必要がありましたrequire 'rack/handler'
Prakash Murthy 14

1

をインストールし$ gem install foreman、foremanを使用して、次のProcfileように定義されているようにサーバーを起動できます。

web: bundle exec rails -p 10524

あなたはforemanここで宝石のドキュメントをチェックすることができます:詳細についてはhttps://github.com/ddollar/foreman

このアプローチの利点は、設定でポートを簡単に設定/変更できることだけでなく、多くのコードを追加する必要がないことだけでなくProcfile、Foremanが実行するためのさまざまなステップを追加できるので、次のようなアプリケーションを起動するたびに、それらを経由する必要があります。

bundle: bundle install
web: bundle exec rails -p 10524
...
...

乾杯


-4

指定したポートでコマンドのエイリアスをシェルに作成します。


12
あなたのgemパスのファイルを編集するのは...まあ、勇敢な人のためだけです。それは宝石の更新を存続させないでしょう、それはより多くのコンピュータで
動か

2
あなたが正しいです。あなたの解決策ははるかに優れています。で上書きできることを知りませんでしたscript/rails。それをありがとう。
カジュアルコーダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.