На моей машине разработки я использую порт 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'
Принцип прост - вы обезвреживаете обезьяну бегуна сервера, поэтому он будет влиять только на один проект.
UPDATE: Да, я знаю, что существует более простое решение с bash script, содержащее:
#!/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
Решение для 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'
Вдохновленный Радеком и Спенсером... В 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 все еще установлены, а параметры командной строки по-прежнему переопределяют значения по умолчанию.
Мы используем Puma в качестве веб-сервера и dotenv для установки переменных среды в процессе разработки. Это означает, что я могу установить переменную среды для PORT
и указать ее в конфигурации Puma.
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
Однако вам нужно будет запустить приложение с foreman start
вместо rails s
, иначе конфигурация puma не будет правильно прочитана.
Мне нравится этот подход, потому что конфигурация работает одинаково в процессе разработки и производства, вы просто меняете значение порта, если это необходимо.
Вы можете установить $ gem install 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
...
...
Приветствия
Создайте псевдоним в своей оболочке для команды с указанным портом.