tutorial sirve sintaxis rails que proyecto para instalar crear caracteristicas aprender ruby-on-rails rack rack-middleware

ruby-on-rails - sirve - ruby on rails tutorial



¿Cómo determinar si Rails se está ejecutando desde CLI, consola o como servidor? (6)

''Servidor'' no está definido cuando Rails 5 se ejecuta bajo Pasajero.

La mejor solución que he encontrado es una variante de this respuesta:

if %w(rails rake).include?(File.basename($0)) <console or runner> else <server> end

Tengo un middleware para anunciar mi aplicación en la aplicación de red local que utiliza Bonjour , pero también anuncia el servicio cuando se invoca Rails desde rastrillo oa través de la consola.

Me gustaría excluir estos casos, y solo usar el middleware Bonjour cuando Rails se ejecuta como un servidor.

La configuración de middleware acepta un proc para excluir middlewares bajo ciertas condiciones usando un proc :

config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env| env[''HTTPS''] != ''on'' }

Pero, ¿cómo puedo determinar si Rails fue invocado desde la CLI, la consola o como un servidor?


Echar un vistazo al módulo Rails mediante el uso de pry revela que las invocaciones de la consola se pueden detectar así:

Rails.const_defined? ''Console''

Y invocaciones de servidor como esta:

Rails.const_defined? ''Server''


En nuestro proyecto tuve que detectar el modo de consola en boot.rb , para eso utilicé:

in_console = (ARGV & [''c'', ''console'']).any?

No es una solución infalible, pero lo suficientemente buena para nuestro caso de uso.


Para Padrino:

Comprobación de la consola:

if Padrino::constants.include? :Cli #your code end

Verificación del servidor:

if !Padrino::constants.include? :Cli #your code end


Super servicial Gracias @crishoj.

Quería examinar el objeto de la Consola más de cerca por otro problema en el que estoy trabajando y descubrí que la constante de la Consola se puede alcanzar con Rails::Console , por lo que otra opción para verificar sería usar:

defined? Rails::Console defined? Rails::Server


Usando Rails 5 con o sin un servidor de aplicaciones como Puma / Passenger, aquí hay tres maneras de determinar cómo se ejecuta su aplicación:

# We are running in a CLI console defined?(Rails::Console) # We are running as a Rack application (including Rails) caller.any?{|l| l =~ %r{/config.ru/}} # We are running as a CLI console caller.any?{|l| l =~ %r{/lib/rake/task.rb:/d+:in `execute''}}