На своїй машині розробки я використовую порт 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 не читається належним чином.
Мені подобається такий підхід, оскільки конфігурація працює однаково в розробці та виробництві, ви просто змінюєте значення порту, якщо потрібно.
Натхненний 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 все ще встановлені, а перемикачі командного рядка все ще перекривають значення за замовчуванням.
Рішення для рейок 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
та використовувати бригадира для запуску свого сервера, як визначено у вашому 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
якщо працює сервер puma за замовчуванням