Неинициализированная константа File :: NOCTTY ошибка, когда мне требуется 'fakefs' - PullRequest
4 голосов
/ 17 апреля 2011

Я пытаюсь использовать FakeFS , но постоянно получаю неинициализированную постоянную ошибку, когда я require 'fakefs':

C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:26:in `<class:File>': uninitialized constant File::NOCTTY (NameError)

Я изначально работал в RubyMine, но для изоляции проблемы янаписал простой сценарий hello world, запустил его из командной строки и все равно получил ту же ошибку.Вот этот скрипт:

require 'rubygems'
gem 'fakefs'
require 'fakefs'

puts "Hello Cleveland!"

А вот ошибка и сопровождающая трассировка стека:

>ruby foo.rb
C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:26:in `<class:File>': uninitialized constant File::NOCTTY (NameError)
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:4:in `<module:FakeFS>'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:3:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/safe.rb:9:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs.rb:1:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from foo.rb:3:in `<main>'

Я установил гем fakefs через RubyMine.Я работаю на Windows с Ruby 1.9.Есть идеи?

1 Ответ

3 голосов
/ 17 апреля 2011

Это потому, что в Windows нет флагов NOCTTY и SYNC.Вы можете добавить этот метод в файл base.rb:

def RealFile.const_missing const
  const_set const, 42
end

Действительно, я не знаю, вызовет ли он какие-либо проблемы или нет в будущем, но вы по крайней мере сможете запустить свой скрипт.И я думаю, что вы должны написать об этом по адресу github

Есть ветка с некоторыми исправлениями для окон (этот парень прокомментировал все флаги вообще): https://github.com/vertiginous/fakefs

...