Guid вызывает "Не удается найти случайное устройство" - PullRequest
2 голосов
/ 05 июля 2011

Я пытаюсь использовать Guid для генерации уникальных идентификаторов в моем проекте Ruby. Это пример файла ruby, который я создал для проверки его функциональности:

require 'guid'
g = Guid.new
puts g    

Когда я запускаю этот файл, я получаю эту ошибку.

E:/Apps/Ruby186/lib/ruby/site_ruby/1.8/guid.rb:67:in `initialize': Can't find random device (Runtime Error)
from guid_test.rb:3:in `new'
from guid_test.rb:3

В чем может быть причина этого? Я использую Ruby на Windows 7 (64-битной) машине.

1 Ответ

3 голосов
/ 05 июля 2011

Согласно http://www.koders.com/ruby/fid47791138EC0592EEEF2FC1F55408231838DF7CA4.aspx?s=game, исходный код guid проверяет тип ОС через

if RUBY_PLATFORM =~ /win/i
    module Guid_Win32_
        require 'Win32API'

По-видимому, в вашем случае (Windows 7 64bit) эта проверка завершается неудачно (RUBY_PLATFORM возвращает что-то еще (например, i386-mingw32 для моей установки Ruby 1.9 в Windows7 64bit)), и он пытается использовать код Unix, который затем пытается открыть / dev / urandom - это не удалось.

Таким образом, вы можете проверить, что RUBY_PLATFORM возвращает в вашей ОС, изменить исходный код guid.rb и отправить патч разработчикам, чтобы они могли это исправить.

...