在开发计算机上,我使用端口10524。因此,我以这种方式启动服务器:
rails s -p 10524
有没有办法将默认端口更改为10524,这样我就不必在每次启动服务器时都附加端口?
在开发计算机上,我使用端口10524。因此,我以这种方式启动服务器:
rails s -p 10524
有没有办法将默认端口更改为10524,这样我就不必在每次启动服务器时都附加端口?
Answers:
首先-不要在您的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'
原理很简单-您正在修补服务器运行程序,因此它只会影响一个项目。
更新:是的,我知道使用bash脚本包含以下更简单的解决方案:
#!/bin/bash
rails server -p 10524
但是此解决方案有一个严重的缺点-很无聊。
alias rs='rails server -p 10524'
require 'rails/commands'
粘贴新内容之后放进去。否则它将仍然尝试使用端口
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
代替别名hack。
super
使用它代替别名,则会调用错误的方法。它调用::Rack::Server
default_options 的版本。
prepend
使用匿名模块,而不是使用alias
。这样可以干净地使用super
。
Rails::Server
在不应该使用的上下文中被定义(例如,运行Rails控制台)。因此,我建议将代码放在末尾application.rb
,并以加以保护if defined?(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
config.action_mailer.default_url_options
,否则它仍然指向端口3000
受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中的所有其他配置仍会设置,并且命令行开关仍会覆盖默认值。
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
,并使用领班按照您的方式启动服务器Procfile
:
web: bundle exec rails -p 10524
您可以在以下位置查看foreman
gem文档:https://github.com/ddollar/foreman了解更多信息
这种方法的好处不仅在于您可以轻松地在配置中设置/更改端口,并且不需要添加太多代码,而且还可以添加其他步骤,Procfile
使领班为您运行,因此您无需每次您要启动应用程序时都不必遍历它们,例如:
bundle: bundle install
web: bundle exec rails -p 10524
...
...
干杯
在外壳程序中为具有指定端口的命令创建别名。
script/rails
。感谢那。
config/puma.rb
如果运行默认的彪马服务器,则简单的答案是编辑