Подтвердить что ты не робот

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

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

Любые идеи?

Отношения Felix

4b9b3361

Ответ 1

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

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

Затем запустите rake server

Ответ 2

Добавьте это к 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.

Ответ 3

Вариант 1:

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

    rails server -p 8080

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

Вариант 2:

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

Ответ 4

Если вы поместите параметры по умолчанию на config/boot.rb, тогда все атрибуты команд для rake и rails не сработают (пример: rake -T или rails g model user)! Итак, добавьте это значение в bin/rails после line require_relative '../config/boot', и код выполняется только для команды сервера rails:

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 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

Для 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)