如何在开发中更改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和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中的所有其他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
您可以在这里查看foreman
gem文档: https : //github.com/ddollar/foreman获取更多信息
这种方法的好处是不仅可以很容易地在configuration中设置/更改端口,也不需要添加太多的代码,而且你可以在工程文件中添加不同的步骤,领class将为你运行,所以你不要每次你想要开始你的应用程序时,都不必去通过它们:
bundle: bundle install web: bundle exec rails -p 10524 ... ...
干杯
使用指定的端口在shell中创build别名。