如何在开发中更改Rails 3服务器的默认端口?

在我的开发机器上,我使用端口10524.所以我以这种方式启动我的服务器:

rails s -p 10524 

有没有办法将默认端口更改为10524,所以我不必每次启动服务器时追加端口?

首先 – 不要编辑你的gempath中的任何东西! 它会影响到所有的项目,而且以后你会遇到很多问题。

在你的项目中编辑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' 

原则很简单 – 你正在修补服务器跑步者 – 所以它只会影响一个项目。

更新 :是的,我知道有更简单的解决scheme与bash脚本包含:

 #!/bin/bash rails server -p 10524 

但这个解决scheme有一个严重的缺点 – 它是无聊的地狱。

config/boot.rb加到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 

给你一个更多的想法。 创build一个使用-p调用rails服务器的rake任务。

 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 

解决scheme的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' 

受Radek和Spe​​ncer的启发…在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中的所有其他configuration仍然被设置,命令行开关仍然覆盖默认值。

我们使用Puma作为Web服务器,并使用dotenv设置开发环境variables。 这意味着我可以为PORT设置一个环境variables,并在Pumaconfiguration中引用它。

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

但是,你将不得不开始你的应用程序与foreman start而不是rails s ,否则pumaconfiguration不会正确读取。

我喜欢这种方法,因为configuration在开发和生产中的工作方式是相同的,如果需要的话只需更改端口的值。

您可以安装$ gem install foreman ,并使用工头按照您的Procfile定义启动服务器, Procfile所示:

 web: bundle exec rails -p 10524 

您可以在这里查看foremangem文档: https : //github.com/ddollar/foreman获取更多信息

这种方法的好处是不仅可以很容易地在configuration中设置/更改端口,也不需要添加太多的代码,而且你可以在工程文件中添加不同的步骤,领class将为你运行,所以你不要每次你想要开始你的应用程序时,都不必去通过它们:

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

干杯

使用指定的端口在shell中创build别名。