Come cambiare la porta predefinita del server Rails 3 in develoment?

Sulla mia macchina di sviluppo, utilizzo la porta 10524. Così avvio il mio server in questo modo:

rails s -p 10524 

C’è un modo per cambiare la porta predefinita a 10524 quindi non dovrei aggiungere la porta ogni volta che avvio il server?

Primo: non modificare nulla nel tuo percorso gemmologico! Influirà su tutti i progetti e avrai molti problemi dopo …

Nel tuo progetto modifica 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: si sta eseguendo il patching del server runner per le scimmie, quindi influenzerà un solo 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 inconveniente: è noioso da morire.

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 

Un’altra idea per te. Crea un’attività di rake che chiama il server di rotaie con -p.

 task "start" => :environment do system 'rails server -p 3001' end 

quindi chiama rake start posto del rails server

Combinando due risposte precedenti, per Rails 4.0.4 (e verso l’alto, 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 

Utilizziamo Puma come server Web e dotenv per impostare le variabili di ambiente durante lo sviluppo. Ciò significa che è ansible impostare una variabile di ambiente per PORT e riferirla nella configurazione Puma.

 # .env PORT=10524 # config/puma.rb port ENV['PORT'] 

Tuttavia, dovrai avviare la tua app con l’ foreman start anziché i rails s , altrimenti la configurazione di puma non viene letta correttamente.

Mi piace questo approccio perché la configurazione funziona allo stesso modo nello sviluppo e nella produzione, basta modificare il valore della porta se necessario.

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' 

Ispirato da Radek e Spencer … On Rails 4 (.0.2 – Ruby 2.1.0), sono riuscito ad aggiungerlo 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 continuano a sovrascrivere i valori predefiniti.

Puoi installare $ gem install foreman e usare foreman per avviare il tuo server come definito nel tuo Procfile come:

 web: bundle exec rails -p 10524 

È ansible consultare i documenti relativi ai foreman qui: https://github.com/ddollar/foreman per ulteriori informazioni

Il vantaggio di questo approccio è non solo è ansible impostare / modificare la porta nella configurazione facilmente e che non richiede molto codice da aggiungere ma è anche ansible aggiungere diversi passaggi nel Procfile che foreman eseguirà per te in modo da non indossare è necessario andare a loro ogni volta che si desidera avviare l’applicazione qualcosa come:

 bundle: bundle install web: bundle exec rails -p 10524 ... ... 

Saluti

Crea un alias nella tua shell per il comando con una porta specificata.