25

我知道我可以通过-p选项在另一个端口上启动 rails 服务器。但是只要我启动 webrick,我想为每个应用程序设置另一个端口。

有任何想法吗?

问候菲利克斯

4

5 回答 5

36

将此附加到config/boot.rb

require 'rails/commands/server'

module DefaultOptions
  def default_options
    super.merge!(Port: 3001)
  end
end

Rails::Server.send(:prepend, DefaultOptions)

注意:需要 ruby​​ >= 2.0。

于 2013-10-25T10:00:02.500 回答
32

快速解决方案:追加到Rakefile

task :server do
  `bundle exec rails s -p 8080`
end

然后运行rake server

于 2013-08-08T17:01:06.807 回答
21

选项1:

您可以像这样启动 WEBrick:

    rails server -p 8080

其中 8080 是您的端口。如果您愿意,可以将其放入 bash 脚本中以方便使用。

选项 2:

您可以安装$ gem install foreman,并使用工头来启动您的生产网络服务器(例如独角兽),如您所定义的Procfile那样:$ foreman run web. 如果 unicorn 是您的 Web 服务器,您可以在 unicorn 配置文件中指定端口(与大多数服务器选择一样)。这种方法的好处不仅在于您可以在配置中设置端口,而且您使用的环境更接近生产环境。

于 2013-08-08T07:55:29.430 回答
4

如果您设置默认选项,config/boot.rb则 rake 和 rails 的所有命令属性都会失败(例如:rake -Trails g model user)!因此,将其附加到bin/rails行后require_relative '../config/boot',代码仅针对 rails server 命令执行:

if ARGV.first == 's' || ARGV.first == 'server'
  require 'rails/commands/server'
  module Rails
    class Server
      def default_options
        super.merge(Host:  '0.0.0.0', Port: 3000)
      end
    end
  end
end

bin/rails文件如下所示:

#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application',  __FILE__)
require_relative '../config/boot'

# Set default host and port to rails server
if ARGV.first == 's' || ARGV.first == 'server'
  require 'rails/commands/server'
  module Rails
    class Server
      def default_options
        super.merge(Host:  '0.0.0.0', Port: 3000)
      end
    end
  end
end

require 'rails/commands'
于 2015-09-09T08:15:22.617 回答
2

对于 Rails 5.1:

# config/boot.rb

# ... existing code

require 'rails/command'
require 'rails/commands/server/server_command'

Rails::Command::ServerCommand.send(:remove_const, 'DEFAULT_PORT')
Rails::Command::ServerCommand.const_set('DEFAULT_PORT', 3333)
于 2017-10-20T08:17:02.823 回答