Na moim komputerze deweloperskim używam portu 10524. Tak więc uruchamiam serwer:
rails s -p 10524
Czy jest sposób, aby zmienić domyślny port na 10524, aby nie musiał dodawać portu za każdym razem, gdy uruchamiam serwer?
Na moim komputerze deweloperskim używam portu 10524. Tak więc uruchamiam serwer:
rails s -p 10524
Czy jest sposób, aby zmienić domyślny port na 10524, aby nie musiał dodawać portu za każdym razem, gdy uruchamiam serwer?
Odpowiedzi:
Po pierwsze - nie edytuj niczego na swojej ścieżce klejnotów! Wpłynie to na wszystkie projekty, a później będziesz miał sporo problemów ...
W swoim projekcie edytuj w script/rails
ten sposób:
#!/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'
Zasada jest prosta - małpa łatasz runnera serwera - więc wpłynie to tylko na jeden projekt.
AKTUALIZACJA : Tak, wiem, że istnieje prostsze rozwiązanie ze skryptem bash zawierającym:
#!/bin/bash
rails server -p 10524
ale to rozwiązanie ma poważną wadę - jest nudne jak cholera.
alias rs='rails server -p 10524'
require 'rails/commands'
PO nowej rzeczy, którą wklejasz. W przeciwnym razie nadal będzie próbować portu 3000.
alias rs
Lubię dołączyć następujące informacje do 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
zamiast aliasu hack.
super
jest używany zamiast aliasu, wywołuje niewłaściwą metodę. Wzywa ::Rack::Server
wersję default_options.
prepend
zamiast używać anonimowego modułu alias
. Pozwala to na czyste użycie super
.
Rails::Server
zostanie zdefiniowana w kontekstach, w których nie powinna (np. Uruchamianie konsoli Rails). Dlatego polecam umieścić kod na końcu application.rb
, chroniony rozszerzeniem if defined?(Rails::Server)
.
Łącząc dwie poprzednie odpowiedzi, dla Rails 4.0.4 (i nowszych, przypuszczalnie), to wystarczy na koniec 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
, w przeciwnym razie nadal wskazuje port 3000.
Używamy Pumy jako serwera WWW i dotenv do ustawiania zmiennych środowiskowych w fazie rozwoju. Oznacza to, że mogę ustawić zmienną środowiskową dla PORT
i odwołać się do niej w konfiguracji Puma.
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
Musisz jednak uruchomić aplikację za pomocą foreman start
zamiastrails s
, w przeciwnym razie konfiguracja puma nie zostanie poprawnie odczytana.
Podoba mi się to podejście, ponieważ konfiguracja działa w ten sam sposób w programowaniu i produkcji, po prostu zmieniasz wartość portu, jeśli to konieczne.
Zainspirowany przez Radka i Spencera ... Na Rails 4 (.0.2 - Ruby 2.1.0), udało mi się dodać to do 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
Cała inna konfiguracja w default_options jest nadal ustawiona, a przełączniki wiersza polecenia nadal zastępują wartości domyślne.
Rozwiązanie dla 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'
przed require 'rack/handler'
, aby zadziałało.
Możesz zainstalować $ gem install foreman
i użyć brygadzisty, aby uruchomić serwer, jak zdefiniowano w Procfile
:
web: bundle exec rails -p 10524
Możesz sprawdzić foreman
dokumenty klejnotów tutaj: https://github.com/ddollar/foreman, aby uzyskać więcej informacji
Zaletą tego podejścia jest nie tylko możliwość łatwego ustawienia / zmiany portu w konfiguracji i to, że nie wymaga to dużej ilości kodu do dodania, ale także możesz dodać różne kroki w tym, Procfile
że brygadzista będzie działał za Ciebie, więc nie nie musisz przechodzić przez nie za każdym razem, gdy chcesz uruchomić aplikację, na przykład:
bundle: bundle install
web: bundle exec rails -p 10524
...
...
Twoje zdrowie
Utwórz alias w swojej powłoce dla polecenia z określonym portem.
script/rails
. Dziękuję za to.
config/puma.rb
jeśli uruchamiasz domyślny serwer puma