私の開発マシンでは、ポート10524を使用しています。そのため、サーバーを次のように起動します。
rails s -p 10524
サーバーを起動するたびにポートを追加する必要がないように、デフォルトのポートを10524に変更する方法はありますか?
私の開発マシンでは、ポート10524を使用しています。そのため、サーバーを次のように起動します。
rails s -p 10524
サーバーを起動するたびにポートを追加する必要がないように、デフォルトのポートを10524に変更する方法はありますか?
回答:
まず、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
しかし、このソリューションには重大な欠点があります-それは地獄のように退屈です。
alias rs='rails server -p 10524'
require 'rails/commands'
あなたが貼り新しいものAFTERそうでなければ、それはまだポート3000をしようとします。
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::Server
default_options のバージョンを呼び出します。
prepend
では、を使用する代わりに匿名モジュールを使用できますalias
。これにより、をクリーンに使用できますsuper
。
Rails::Server
、本来あるべきではない(Railsコンソールの実行など)コンテキストで定義されることになります。したがってapplication.rb
、で保護されたコードをの最後に置くことをお勧めしますif defined?(Rails::Server)
。
前の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を指しています、
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の他のすべての構成は引き続き設定されており、コマンドラインスイッチはデフォルトをオーバーライドします。
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'
require File.dirname(__FILE__) + '/../config/boot'
前に移動する必要がありましたrequire 'rack/handler'
。
をインストールし$ 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
...
...
乾杯
config/puma.rb
デフォルトのプーマサーバーを実行している場合、簡単な答えは編集です