Как изменить порт по умолчанию сервера Rails 3 в развитии?
На моей машине разработки я использую порт 10524. Поэтому я запускаю свой сервер таким образом:
rails s -p 10524
Есть ли способ изменить порт по умолчанию на 10524, поэтому мне не нужно будет добавлять порт каждый раз при запуске сервера?
- Поймать все исключения в controllerе рельсов
- переменная экземпляра против символа в rubyе на рельсах (form_for)
- Конвертировать приложение Ruby on Rails из sqlite в MySQL?
- Разница между строкой и текстом в рельсах?
- Разница между -%> и%> в рельсах
- Отношение «многие ко многим» с той же моделью в рельсах?
- Переполнение печенья в рельсах?
- Как отображать время в часовом поясе пользователя
- Как реализовать систему достижений в RoR
- Как настроить Ruby on Rails без базы данных?
- Rails: вызов другого действия controllerа с controllerа
- Переадресовывают ли redirect_to и обмениваются?
- путают autoload_paths vs eager_load_paths в рельсах 4
Сначала – ничего не редактируйте на своем пути! Это повлияет на все проекты, и у вас будет много проблем позже …
В вашем проекте редактируйте 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 ... ...
ура
Создайте псевдоним в своей оболочке для команды с указанным портом.