2011-02-02 19 views
31

Qual è il modo corretto di rilevare all'interno di Ruby se l'interprete è in esecuzione su Windows? "Corretto" include che funziona su tutti i principali sapori di Ruby, inclusi 1.8.x, 1.9.x, JRuby, Rubinius e IronRuby.Qual è il modo corretto per rilevare se Ruby è in esecuzione su Windows?

I risultati di Google attualmente migliori per "ruby detect windows" sono tutti errati o non aggiornati. Per esempio, in un modo non corretto per farlo è:

RUBY_PLATFORM =~ /mswin/ 

Questo non è corretto perché non riesce a rilevare la versione MinGW o JRuby su Windows.

Qual è la strada giusta?

+7

Per completezza: un altro ** ** sbagliato strada che vedo spesso è 'RUBY_PLATFORM = ~/win /', che manca anche il porto MinGW (che è quello che tutti attualmente usano in questi giorni) e, peggio ancora, corrisponde anche a Darwin, cioè OSX. –

risposta

31

opzione preferita (aggiornato sulla base @ John raccomandazioni):

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

Questo potrebbe anche funzionare, ma è meno affidabile (non funziona con le versioni più vecchie, e la variabile d'ambiente possono essere modificato)

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

(non posso facilmente testare sia su tutti i rubini elencati, o qualcosa, ma Windows 7, ma so che sia lavorerà per 1.9.x, IronRuby, e JRuby).

+0

incompleto (necessario numero minimo di caratteri necessari) – akostadinov

51

Si scopre, c'è this way:

Gem.win_platform? 
+1

Impressionante, semplice e funziona bene! –

+0

Questo proviene da RubyGems, incluso in MRI> = 1.9. Altri rubini devono includere la gemma per poter usare questo. È eccellente sapere, ma non soddisfa pienamente i criteri dell'OP. – aenw

+1

E queste sono le piattaforme che corrisponde: https://github.com/rubygems/rubygems/blob/ac20ec2c0972569c76c7d344b0029016fcf5892f/lib/rubygems.rb#L122. – sschuberth

Problemi correlati