На моей машине для разработки я использую порт 10524. Поэтому я запускаю свой сервер следующим образом:
rails s -p 10524
Есть ли способ изменить порт по умолчанию на 10524, чтобы мне не приходилось добавлять порт при каждом запуске сервера?
На моей машине для разработки я использую порт 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'
Принцип прост - вы просто исправляете патч на сервере - так что это повлияет только на один проект.
ОБНОВЛЕНИЕ : Да, я знаю, что есть более простое решение со скриптом bash, содержащим:
#!/bin/bash
rails server -p 10524
но у этого решения есть серьезный недостаток - оно чертовски скучно.
alias rs='rails server -p 10524'
require 'rails/commands'ПОСЛЕ нового материала, который вы вставляете. В противном случае он все равно попробует порт 3000.
alias rs
Я хотел бы добавить следующее к 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
superвместо псевдонима взломать.
superвместо псевдонима используется неверный метод. Он вызывает ::Rack::Serverверсию default_options.
prependиспользовать анонимный модуль вместо использования alias. Это позволяет чистое использование super.
Rails::Serverк тому, что он будет определен в контекстах, когда этого не должно быть (например, при запуске консоли Rails). Поэтому я рекомендую поставить код в конце application.rb, охраняемый с if defined?(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
config.action_mailer.default_url_options, в противном случае он по-прежнему указывает на порт 3000.
Мы используем Puma в качестве веб-сервера и dotenv для установки переменных среды в процессе разработки. Это означает, что я могу установить переменную окружения PORTи ссылаться на нее в конфигурации Puma.
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
Однако foreman startвместо этого вам придется запускать приложение rails s, иначе конфигурация puma не будет прочитана должным образом.
Мне нравится этот подход, потому что конфигурация работает одинаково при разработке и производстве, вы просто меняете значение порта, если это необходимо.
Вдохновленный Радеком и Спенсером ... На 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 по-прежнему установлены, а параметры командной строки по-прежнему переопределяют значения по умолчанию.
Решение для 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'
require File.dirname(__FILE__) + '/../config/boot'раньше, require 'rack/handler'чтобы это работало.
Вы можете установить $ gem install foremanи использовать foreman для запуска вашего сервера, как определено в вашем Procfileподобном:
web: bundle exec rails -p 10524
Вы можете проверить foremanдокументацию Gem здесь: https://github.com/ddollar/foreman для получения дополнительной информации
Преимущество этого подхода состоит не только в том, что вы можете легко установить / изменить порт в конфигурации и что он не требует большого количества кода для добавления, но также вы можете добавить различные шаги в том, Procfileчто мастер будет работать для вас, так что вы не будете ' вам не нужно проходить через них каждый раз, когда вы хотите запустить приложение, например:
bundle: bundle install
web: bundle exec rails -p 10524
...
...
ура
Создайте псевдоним в вашей оболочке для команды с указанным портом.
script/rails. Спасибо за это.
config/puma.rbесли запущен сервер