Как изменить порт сервера Rails 3 по умолчанию в разработке? - PullRequest
162 голосов
/ 02 октября 2010

На моей машине для разработки я использую порт 10524. Поэтому я запускаю свой сервер следующим образом:

rails s -p 10524

Есть ли способ изменить порт по умолчанию на 10524, чтобы мне не приходилось добавлять порт при каждом запуске сервера?

Ответы [ 9 ]

130 голосов
/ 02 октября 2010

Первый - не редактируйте ничего в своем пути к драгоценным камням! Это повлияет на все проекты, и у вас будет много проблем позже ...

В вашем проекте отредактируйте 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

но у этого решения есть серьезный недостаток - оно чертовски скучно.

129 голосов
/ 30 июня 2011

Мне нравится добавлять следующее к 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
28 голосов
/ 18 июля 2012

Еще одна идея для вас. Создайте задачу rake, которая вызывает сервер rails с параметром -p.

task "start" => :environment do
  system 'rails server -p 3001'
end

, затем позвоните rake start вместо rails server

15 голосов
/ 06 мая 2014

Сочетая два предыдущих ответа для 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
7 голосов
/ 12 мая 2016

Мы используем Puma в качестве веб-сервера, а dotenv для установки переменных среды в процессе разработки.Это означает, что я могу установить переменную окружения для PORT и ссылаться на нее в конфигурации Puma.

# .env
PORT=10524


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

Однако вам придется запускать ваше приложение с foreman start вместо rails s,в противном случае конфигурация puma не читается должным образом.

Мне нравится этот подход, потому что конфигурация работает одинаково при разработке и производстве, вы просто меняете значение порта, если это необходимо.

4 голосов
/ 05 апреля 2014

Вдохновленный Радеком и Спенсером ... На 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 по-прежнему установлены, а параметры командной строки по-прежнему отменяют значения по умолчанию.

3 голосов
/ 05 ноября 2013

Решение для 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'
1 голос
/ 03 сентября 2017

Вы можете установить $ gem install foreman и использовать foreman для запуска вашего сервера, как определено в Procfile, например:

web: bundle exec rails -p 10524

Вы можете проверить foreman документацию по драгоценным камням здесь: https://github.com/ddollar/foreman для получения дополнительной информации

Преимущество этого подхода состоит не только в том, что вы можете легко установить / изменить порт в конфигурации и не требует большого количества кода для добавления, но также вы можете добавлять различные шаги в Procfile, который будет выполнять мастер для вас, так что вам не нужно идти через них каждый раз, когда вы хотите, чтобы запустить ваше приложение что-то вроде:

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

Приветствия

0 голосов
/ 02 октября 2010

Создать псевдоним в вашей оболочке для команды с указанным портом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...