¿Cómo cambiar el puerto predeterminado del servidor Rails 3 en develoment?


En mi máquina de desarrollo, uso el puerto 10524. Así que arranco mi servidor de esta manera :

rails s -p 10524

¿Hay alguna manera de cambiar el puerto predeterminado a 10524 para que no tenga que anexar el puerto cada vez que inicie el servidor?

Author: Pierre Olivier Martel, 2010-10-02

9 answers

Primero - ¡no edites nada en tu ruta de gemas! Influirá en todos los proyectos, y tendrá muchos problemas más tarde...

En tu proyecto edita script/rails de esta manera:

#!/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'

El principio es simple - usted está parcheando el servidor runner-por lo que influirá en un solo proyecto.

UPDATE : Sí, sé que hay una solución más simple con el script bash que contiene:

#!/bin/bash
rails server -p 10524

Pero esta solución tiene un grave inconveniente - es aburrido como el infierno.

 127
Author: Radek Paviensky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 21:22:49

Me gusta añadir lo siguiente 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
 127
Author: Spencer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-30 18:10:54

Una idea más para ti. Crear una tarea de rake que llame al servidor rails con-p.

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

Luego llama a rake start en lugar de rails server

 26
Author: Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-18 03:35:48

Combinando dos respuestas anteriores, para Rails 4.0.4 (y arriba, presumiblemente), esto es suficiente al final de config/boot.rb:

require 'rails/commands/server'

module Rails
  class Server
    def default_options
      super.merge({Port: 10524})
    end
  end
end
 13
Author: Thilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-23 11:02:46

Estamos usando Puma como servidor web, y dotenv para establecer variables de entorno en desarrollo. Esto significa que puedo establecer una variable de entorno para PORT, y referenciarla en la configuración de Puma.

# .env
PORT=10524


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

Sin embargo, tendrá que iniciar su aplicación con foreman start en lugar de rails s, de lo contrario la configuración de puma no se lee correctamente.

Me gusta este enfoque porque la configuración funciona de la misma manera en desarrollo y producción, solo cambia el valor del puerto si necesario.

 4
Author: declan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-11 21:52:37

Solución para Rieles 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'
 3
Author: Nowaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-05 11:13:59

Inspirado por Radek y Spencer... Sobre Raíles 4(.0.2-Ruby 2.1.0), pude añadir esto 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

Todas las demás configuraciones en default_options todavía están configuradas, y los conmutadores de línea de comandos todavía anulan los valores predeterminados.

 3
Author: TuK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-05 07:25:40

Puede instalar $ gem install foreman, y usar foreman para iniciar su servidor como se define en su Procfile como:

web: bundle exec rails -p 10524

Puedes consultar foreman los documentos de gema aquí: https://github.com/ddollar/foreman para más información

El beneficio de este enfoque no solo es que puede configurar / cambiar el puerto en la configuración fácilmente y que no requiere mucho código para ser agregado, sino que también puede agregar diferentes pasos en el Procfile que foreman ejecutará para usted por lo que no tiene que ir a través de ellos cada vez que desea iniciar la aplicación, algo como:

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

Salud

 0
Author: Mark Jad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-03 07:18:51

Cree alias en su shell para el comando con un puerto especificado.

 -4
Author: Casual Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-11 09:23:27