在我的开发机器上,我使用端口10524.所以我以这种方式启动我的服务器:
rails s -p 10524
有没有办法将默认端口更改为10524,所以每次启动服务器时都不必附加端口?
答案 0 :(得分:130)
首先 - 不要在宝石路径中编辑任何内容!它会影响所有项目,以后你会遇到很多问题......
在您的项目中以这种方式编辑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
但是这个解决方案有一个严重的缺点 - 它很无聊。
答案 1 :(得分:129)
我想将以下内容附加到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
答案 2 :(得分:28)
还有一个想法。创建一个使用-p调用rails服务器的rake任务。
task "start" => :environment do
system 'rails server -p 3001'
end
然后拨打rake start
而不是rails server
答案 3 :(得分:15)
结合前两个答案,对于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
答案 4 :(得分:7)
我们使用Puma作为Web服务器,dotenv在开发中设置环境变量。这意味着我可以为PORT
设置一个环境变量,并在Puma配置中引用它。
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
但是,您必须使用foreman start
代替rails s
启动应用,否则puma配置无法正常读取。
我喜欢这种方法,因为配置在开发和生产中的工作方式相同,只需在必要时更改端口的值。
答案 5 :(得分:4)
受到拉德克和斯宾塞的启发...... 在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中的所有其他配置仍然设置,命令行开关仍会覆盖默认值。
答案 6 :(得分: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'
答案 7 :(得分:1)
您可以安装$ 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
...
...
干杯
答案 8 :(得分:0)
如果您使用 puma(我在 Rails 6+ 上使用它):
更改所有环境的默认端口:
如果在 ENV 中未定义,“{3000}”部分设置默认端口。
~/config/puma.rb
change:
port ENV.fetch('PORT') { 3000 }
for:
port ENV.fetch('PORT') { 10524 }
根据环境定义它,使用 Figaro gem 作为凭据/环境变量:
~/application.yml
local_db_username: your_user_name
local_db_password: your_password
PORT: 10524
您可以将其调整为您自己的环境变量管理器。
答案 9 :(得分:-4)
在shell中为具有指定端口的命令创建别名。