En mi máquina de desarrollo, uso el puerto 10524. Así que inicio mi servidor de esta manera:
rails s -p 10524
¿Hay alguna forma de cambiar el puerto predeterminado a 10524 para que no tenga que agregar el puerto cada vez que inicio el servidor?
En mi máquina de desarrollo, uso el puerto 10524. Así que inicio mi servidor de esta manera:
rails s -p 10524
¿Hay alguna forma de cambiar el puerto predeterminado a 10524 para que no tenga que agregar el puerto cada vez que inicio el servidor?
Respuestas:
Primero: ¡no edites nada en tu camino de gemas! Influirá en todos los proyectos, y tendrás muchos problemas más tarde ...
En su proyecto edite de script/rails
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: está aplicando un parche mono al corredor del servidor, por lo que influirá en un solo proyecto.
ACTUALIZACIÓN : Sí, sé que hay una solución más simple con un script bash que contiene:
#!/bin/bash
rails server -p 10524
Pero esta solución tiene un serio inconveniente: es aburrida como el infierno.
alias rs='rails server -p 10524'
require 'rails/commands'
DESPUÉS de las cosas nuevas que pegue. De lo contrario, seguirá probando el puerto 3000.
alias rs
Me gusta agregar 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
super
lugar de alias hack.
super
se usa en lugar de alias, llama al método incorrecto. Llama a la ::Rack::Server
versión de default_options.
prepend
usar un módulo anónimo en lugar de usarlo alias
. Esto permite un uso limpio de super
.
Rails::Server
que se defina en contextos cuando no debería serlo (por ejemplo, ejecutar la consola de Rails). Así que recomiendo poner el código al final de application.rb
, guardado con un if defined?(Rails::Server)
.
Combinando dos respuestas anteriores, para Rails 4.0.4 (y superior, 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
config.action_mailer.default_url_options
, de lo contrario, todavía apunta al puerto 3000.
Estamos usando Puma como servidor web y dotenv para establecer variables de entorno en el desarrollo. Esto significa que puedo establecer una variable de entorno PORT
y hacer referencia a ella en la configuración de Puma.
# .env
PORT=10524
# config/puma.rb
port ENV['PORT']
Sin embargo, tendrá que iniciar su aplicación con en foreman start
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 el desarrollo y la producción, simplemente cambia el valor del puerto si es necesario.
Inspirado por Radek y Spencer ... On Rails 4 (.0.2 - Ruby 2.1.0), pude agregar 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 establecidas, y los modificadores de la línea de comandos aún anulan los valores predeterminados.
Solución para 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'
antes require 'rack/handler'
para que funcione.
Puede instalar $ gem install foreman
y usar foreman para iniciar su servidor como se define en su me Procfile
gusta:
web: bundle exec rails -p 10524
Puede consultar foreman
los documentos de gemas aquí: https://github.com/ddollar/foreman para obtener 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 que se agregue mucho código, sino que también puede agregar diferentes pasos en el Procfile
que el capataz se ejecutará para usted, así que no No tiene que pasar por ellas cada vez que quiera iniciar su aplicación, algo como:
bundle: bundle install
web: bundle exec rails -p 10524
...
...
Salud
Cree un alias en su shell para el comando con un puerto especificado.
script/rails
. Gracias por eso.
config/puma.rb
si se ejecuta el servidor por defecto puma