Как изменить порт по умолчанию сервера Rails 3 в развитии?

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

rails s -p 10524 

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

Сначала – ничего не редактируйте на своем пути! Это повлияет на все проекты, и у вас будет много проблем позже …

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

Принцип прост – вы обезвреживаете обезьяну бегуна сервера, поэтому он будет влиять только на один проект.

UPDATE : Да, я знаю, что есть более простое решение с помощью скрипта bash, содержащего:

 #!/bin/bash rails server -p 10524 

но это решение имеет серьезный недостаток – скучно, как черт.

Мне нравится добавлять в 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 

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

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

затем вызвать rake start вместо rails server

Объединив два предыдущих ответа, для 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 

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

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

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

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

Решение для 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' 

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

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

 web: bundle exec rails -p 10524 

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

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

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

ура

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

  • has_and_belongs_to_many vs has_many через
  • net :: ERR_INCOMPLETE_CHUNKED_ENCODING только в Chrome
  • Rails: ссылки «Next post» и «Previous post» в моем представлении, как?
  • Rails - передача параметров в link_to
  • Разница между form_for, form_tag?
  • Rails: Как работает блок response_to?
  • Rails 4 link_to Destroy не работает в учебном руководстве по началу работы
  • Ruby on Rails form_ для выбора поля с classом
  • Первичный ключ Rails и идентификатор объекта
  • Переопределение Rails default_scope
  • Доступ к current_user в модели
  • Давайте будем гением компьютера.