Как изменить порт по умолчанию приложения Rails 4?

Я знаю, что могу запустить сервер rails на другом порту через . Но я хотел бы настроить другой порт для каждого приложения, пока я запускаю webrick.

какие идеи?

С уважением Феликс!--2-->

5 ответов


быстрое решение: добавить Rakefile

task :server do
  `bundle exec rails s -p 8080`
end
выполнить rake server

добавить это 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.


Вариант 1:

вы можете запустить WEBrick так:

    rails server -p 8080

где 8080-это порт. Если вам нравится, вы можете бросить это в сценарий bash для удобства.

Вариант 2:

вы можете установить $ gem install foreman и используйте foreman для запуска вашего производственного веб-сервера( например, unicorn), как определено в вашем Procfile вот так: $ foreman run web. Если unicorn - ваш веб-сервер, вы можете указать порт в конфигурационном файле unicorn (как и в большинстве вариантов сервера). Выгода из этого подхода вы можете не только установить порт в конфигурации, но и использовать среду, которая ближе к производству.


если вы поместите параметры по умолчанию на config/boot.rb затем все атрибуты команды для rake и rails терпят неудачу (пример:rake -T или rails 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

The bin/rails файл loks, как это:

#!/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'

Для Катушек 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)