Неинициализированный файл константы :: Ошибка NOCTTY при запросе ‘fakefs’

#ruby #rubygems #require #rubymine #uninitialized-constant

#ruby #rubygems #требуется #rubymine #неинициализированная константа

Вопрос:

Я пытаюсь использовать 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!"
  

И вот ошибка и сопровождающий ее stacktrace:

 >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:

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

 def RealFile.const_missing const
  const_set const, 42
end
  

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

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

Комментарии:

1. Добавление этого метода делает свое дело. Также спасибо, что указали на форк с исправлениями Windows.