2011-02-02 39 views
31

Cách chính xác để phát hiện từ bên trong Ruby là liệu trình thông dịch có chạy trên Windows không? "Đúng" bao gồm nó hoạt động trên tất cả các hương vị chính của Ruby, bao gồm 1.8.x, 1.9.x, JRuby, Rubinius và IronRuby.Cách chính xác để phát hiện nếu ruby ​​đang chạy trên Windows là gì?

Kết quả tìm kiếm hàng đầu hiện tại của Google cho "cửa sổ phát hiện ruby" đều không chính xác hoặc lỗi thời. Ví dụ: một cách không chính xác để làm điều đó là:

RUBY_PLATFORM =~ /mswin/ 

Điều này không đúng vì không phát hiện được phiên bản mingw hoặc JRuby trên Windows.

Cách phù hợp là gì?

+7

Đối với đầy đủ lợi ích: một ** sai ** cách mà tôi nhìn thấy thường là 'RUBY_PLATFORM = ~/thắng/', mà cũng nhớ cảng MinGW (mà là thứ mà mọi người thực sự sử dụng trong những ngày này) và thậm chí tệ hơn, cũng phù hợp với Darwin, tức là OSX. –

Trả lời

31

Lựa chọn Preferred (cập nhật dựa trên @ khuyến nghị của John):

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

này cũng có thể làm việc, nhưng là ít đáng tin cậy (nó sẽ không làm việc với các phiên bản cũ hơn, và các biến môi trường có thể sửa đổi)

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

(tôi không thể dễ dàng kiểm tra hoặc tất cả các hồng ngọc được liệt kê, hoặc bất cứ điều gì nhưng Windows 7, nhưng tôi biết rằng cả hai sẽ làm việc cho 1.9.x, IronRuby và JRuby).

+0

chưa hoàn thành (số chars tối thiểu của freakin cần thiết) – akostadinov

51

Hóa ra, có this way:

Gem.win_platform? 
+1

Tuyệt vời, đơn giản và hoạt động tốt! –

+0

Đây là từ RubyGems, được bao gồm trong MRI> = 1,9. Rubys khác cần phải bao gồm đá quý để sử dụng này. Thật tuyệt vời khi biết, nhưng không hoàn toàn đáp ứng các tiêu chí của OP. – aenw

+1

Và đây là những nền tảng phù hợp: https://github.com/rubygems/rubygems/blob/ac20ec2c0972569c76c7d344b0029016fcf5892f/lib/rubygems.rb#L122. – sschuberth

Các vấn đề liên quan