rails - sintaxis de lenguaje ruby
¿Cómo puedo encontrar en qué sistema operativo se está ejecutando mi programa Ruby? (9)
Quiero que mi programa Ruby haga cosas diferentes en una Mac que en Windows. ¿Cómo puedo averiguar en qué sistema se está ejecutando mi programa?
(Advertencia: lea el comentario de @Peter Wagenet) Me gusta esto, la mayoría de las personas usan rubygems , es confiable, es multiplataforma
irb(main):001:0> Gem::Platform.local
=> #<Gem::Platform:0x151ea14 @cpu="x86", @os="mingw32", @version=nil>
irb(main):002:0> Gem::Platform.local.os
=> "mingw32"
actualizar el uso junto con "¡Actualización! ¡Adición! Rubygems hoy en día ..." para mitigar cuando Gem::Platform.local.os == ''java''
Cuando solo necesito saber si es un SO Windows o Unix, a menudo es suficiente
is_unix = is_win = false
File::SEPARATOR == ''/'' ? is_unix = true : is_win = true
Hasta ahora nos ha ido muy bien con el siguiente código
def self.windows?
return File.exist? "c:/WINDOWS" if RUBY_PLATFORM == ''java''
RUBY_PLATFORM =~ /mingw32/ || RUBY_PLATFORM =~ /mswin32/
end
def self.linux?
return File.exist? "/usr" if RUBY_PLATFORM == ''java''
RUBY_PLATFORM =~ /linux/
end
def self.os
return :linux if self.linux?
return :windows if self.windows?
nil
end
Tengo una segunda respuesta para agregar más opciones al combate. El os rubygem , y la página github tiene una lista de proyectos relacionados.
require ''os'' >> OS.windows? => true # or OS.doze? >> OS.bits => 32 >> OS.java? => true # if you''re running in jruby. Also OS.jruby? >> OS.ruby_bin => "c:/ruby18/bin/ruby.exe" # or "/usr/local/bin/ruby" or what not >> OS.posix? => false # true for linux, os x, cygwin >> OS.mac? # or OS.osx? or OS.x? => false
Ya sea
irb(main):002:0> require ''rbconfig''
=> true
irb(main):003:0> Config::CONFIG["arch"]
=> "i686-linux"
o
irb(main):004:0> RUBY_PLATFORM
=> "i686-linux"
¡Actualizar! ¡Adición! Rubygems actualmente viene con Gem.win_platform?
.
Ejemplos de usos en el repositorio Rubygems , y este, para mayor claridad:
def self.ant_script
Gem.win_platform? ? ''ant.bat'' : ''ant''
end
Prueba la joya Launchy ( gem install launchy
):
require ''launchy''
Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin
Use la constante RUBY_PLATFORM
y, opcionalmente, envuélvala en un módulo para que sea más amigable:
module OS
def OS.windows?
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
end
def OS.mac?
(/darwin/ =~ RUBY_PLATFORM) != nil
end
def OS.unix?
!OS.windows?
end
def OS.linux?
OS.unix? and not OS.mac?
end
end
No es perfecto, pero funciona bien para las plataformas en las que desarrollo, y es bastante fácil de ampliar.
require ''rbconfig''
include Config
case CONFIG[''host_os'']
when /mswin|windows/i
# Windows
when /linux|arch/i
# Linux
when /sunos|solaris/i
# Solaris
when /darwin/i
#MAC OS X
else
# whatever
end