Sulla mia macchina di sviluppo, utilizzo la porta 10524. Quindi avvio il mio server in questo modo:
rails s -p 10524
C'è un modo per cambiare la porta predefinita in 10524 in modo da non dover aggiungere la porta ogni volta che avvio il server?
Sulla mia macchina di sviluppo, utilizzo la porta 10524. Quindi avvio il mio server in questo modo:
rails s -p 10524
C'è un modo per cambiare la porta predefinita in 10524 in modo da non dover aggiungere la porta ogni volta che avvio il server?
Risposte:
Primo: non modificare nulla nel percorso della gemma! Influenzerà tutti i progetti e in seguito avrai molti problemi ...
Nel tuo progetto modifica in script/rails
questo modo:
#!/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'
Il principio è semplice - stai correggendo le scimmie sul server runner - quindi influenzerà solo un progetto.
AGGIORNAMENTO : Sì, so che esiste una soluzione più semplice con script bash contenente:
#!/bin/bash
rails server -p 10524
ma questa soluzione ha un grave svantaggio: è noiosa da morire.
alias rs='rails server -p 10524'
require 'rails/commands'
DOPO le nuove cose che incolli. Altrimenti proverà comunque la porta 3000.
alias rs
Mi piace aggiungere quanto segue a 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
invece di alias hack.
super
usato al posto dell'alias, chiama il metodo sbagliato. Chiama la ::Rack::Server
versione di default_options.
prepend
un modulo anonimo invece di usarlo alias
. Ciò consente un uso pulito di super
.
Rails::Server
definita in contesti in cui non dovrebbe essere (ad es. Eseguendo la console di Rails). Quindi consiglio di mettere il codice alla fine application.rb
, protetto da un if defined?(Rails::Server)
.
Combinando due risposte precedenti, per Rails 4.0.4 (e versioni successive, presumibilmente), questo è sufficiente alla fine di 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
, altrimenti punta ancora alla porta 3000.
Stiamo usando Puma come web server e dotenv per impostare le variabili di ambiente in fase di sviluppo. Questo significa che posso impostare una variabile d'ambiente per PORT
e fare riferimento nella configurazione di Puma.
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
Tuttavia, dovrai avviare la tua app con foreman start
invece di rails s
, altrimenti la configurazione di puma non verrà letta correttamente.
Mi piace questo approccio perché la configurazione funziona allo stesso modo nello sviluppo e nella produzione, basta cambiare il valore della porta se necessario.
Ispirato da Radek e Spencer ... Su Rails 4 (.0.2 - Ruby 2.1.0), sono stato in grado di aggiungere questo a 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
Tutte le altre configurazioni in default_options sono ancora impostate e le opzioni della riga di comando hanno ancora la precedenza sui valori predefiniti.
Soluzione per 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'
prima require 'rack/handler'
perché funzionasse.
È possibile installare $ gem install foreman
e utilizzare foreman per avviare il server come definito nel proprio Procfile
like:
web: bundle exec rails -p 10524
Puoi consultare i foreman
documenti gemma qui: https://github.com/ddollar/foreman per maggiori informazioni
Il vantaggio di questo approccio non è solo che puoi impostare / modificare facilmente la porta nella configurazione e che non richiede molto codice da aggiungere, ma puoi anche aggiungere diversi passaggi in cui il Procfile
caposquadra verrà eseguito per te, quindi non ' devo provarli ogni volta che vuoi avviare la tua applicazione qualcosa del tipo:
bundle: bundle install
web: bundle exec rails -p 10524
...
...
Saluti
Creare un alias nella shell per il comando con una porta specificata.
script/rails
. Grazie per quello
config/puma.rb
se si esegue il server puma predefinito