2011-02-02 15 views
31

¿Cuál es la forma correcta de detectar desde dentro de Ruby si el intérprete se está ejecutando en Windows? "Correcto" incluye que funciona en todos los sabores principales de Ruby, incluidos 1.8.x, 1.9.x, JRuby, Rubinius e IronRuby.¿Cuál es la forma correcta de detectar si ruby ​​se está ejecutando en Windows?

Los resultados actualmente mejor clasificados de Google para "ruby detect windows" son todos incorrectos u obsoletos. Por ejemplo, una manera incorrecta de hacerlo es:

RUBY_PLATFORM =~ /mswin/ 

Esto es incorrecto, ya que no puede detectar la versión de MinGW o JRuby en Windows.

¿Cuál es el camino correcto?

+7

Para completarlo: otra ** ** equivocada forma en que veo a menudo es 'RUBY_PLATFORM = ~/ganar /', que también pierde el puerto MinGW (que es el que todos usan en estos días) y, lo que es peor, también coincide con Darwin, es decir, OSX. –

Respuesta

31

Opción Preferente (actualizado en base a @ recomendaciones de Juan):

require 'rbconfig' 
is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/) 

Esto también podría funcionar, pero es menos fiable (no funcionará con versiones mucho más antiguas, y la variable de entorno se pueden modificado)

is_windows = (ENV['OS'] == 'Windows_NT') 

(no puedo probar fácilmente ya sea en todos los rubíes de la lista, o cualquier cosa pero Windows 7, pero sé que tanto va a trabajar para 1.9.x, IronRuby y JRuby).

+0

incompleto (número mínimo de caracteres necesarios) – akostadinov

51

Resulta, hay this way:

Gem.win_platform? 
+1

¡Increíble, simple y funciona bien! –

+0

Esto es de RubyGems, que se incluye en MRI> = 1.9. Otros rubys necesitan incluir la gema para usar esto. Es excelente saberlo, pero no cumple con los criterios del OP. – aenw

+1

Y estas son las plataformas con las que coincide: https://github.com/rubygems/rubygems/blob/ac20ec2c0972569c76c7d344b0029016fcf5892f/lib/rubygems.rb#L122. – sschuberth

Cuestiones relacionadas