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



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



rails s -p 10524


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

620   9  

9 ответов:

во - первых-не редактируйте ничего в своем пути драгоценного камня! Это повлияет на все проекты, и у вас будет много проблем позже...

в вашем проекте edit 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

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

Я хотел бы добавить следующее 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 server с помощью-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 не читается должным образом.

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

решение для рельсов 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'

вдохновленный Радеком и Спенсером... На Рельсах 4(.0.2-Ruby 2.1.0 ), я смог добавить это к config / boot.РБ:

# 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, и используйте foreman для запуска вашего сервера, как определено в вашем Procfile как:

web: bundle exec rails -p 10524

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

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

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

Ура

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

Comments

    Ничего не найдено.