#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.