Я знаю, что я могу запустить сервер рельсов на другом порту через опцию -p
. Но я хотел бы настроить другой порт для каждого приложения, пока я начинаю webrick.
Любые идеи?
Отношения Felix
Я знаю, что я могу запустить сервер рельсов на другом порту через опцию -p
. Но я хотел бы настроить другой порт для каждого приложения, пока я начинаю webrick.
Любые идеи?
Отношения Felix
Быстрое решение: добавьте к Rakefile
task :server do
`bundle exec rails s -p 8080`
end
Затем запустите rake server
Добавьте это к config/boot.rb
:
require 'rails/commands/server'
module DefaultOptions
def default_options
super.merge!(Port: 3001)
end
end
Rails::Server.send(:prepend, DefaultOptions)
Примечание: требуется ruby >= 2.0.
Вы можете запустить WEBrick так:
rails server -p 8080
Где 8080 - ваш порт. Если вам нравится, вы можете бросить это в bash script для удобства.
Вы можете установить $ gem install foreman
и использовать мастер для запуска своего веб-сервера (например, единорога), как определено в вашем Procfile
, например: $ foreman run web
. Если единорог - это ваш веб-сервер, вы можете указать порт в конфигурационном файле unicorn (как и в большинстве вариантов сервера). Преимущество этого подхода заключается не только в том, что вы можете установить порт в конфиге, но вы используете среду, которая ближе к производству.
Если вы поместите параметры по умолчанию на config/boot.rb
, тогда все атрибуты команд для rake и rails не сработают (пример: rake -T
или rails g model user
)! Итак, добавьте это значение в bin/rails
после line require_relative '../config/boot'
, и код выполняется только для команды сервера rails:
if ARGV.first == 's' || ARGV.first == 'server'
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
end
Файл bin/rails
loks выглядит следующим образом:
#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
# Set default host and port to rails server
if ARGV.first == 's' || ARGV.first == 'server'
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
end
require 'rails/commands'
Для Rails 5.1:
# config/boot.rb
# ... existing code
require 'rails/command'
require 'rails/commands/server/server_command'
Rails::Command::ServerCommand.send(:remove_const, 'DEFAULT_PORT')
Rails::Command::ServerCommand.const_set('DEFAULT_PORT', 3333)