Рейк «уже инициализированная константа WFKV_» предупреждение

#ruby #rake

#ruby #рейк

Вопрос:

Пытаюсь запустить rake cucumber:ok и получаю эту ошибку:

/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_

Затем:
Command failed with status (1): [/Users/dev/.rbenv/versions/1.9.2-p290/bin...]

Я довольно новичок в Rails, и Google ничего не обнаружил для этой ошибки.

РЕДАКТИРОВАТЬ: я пробовал добавлять bundle exec , и это не имеет никакого значения.

Вот что я получил с --trace :

 /Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:53:in `block in create_shell_runner'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:45:in `call'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:45:in `sh'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `sh'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/cucumber-1.1.0/lib/cucumber/rake/task.rb:104:in `run'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/cucumber-1.1.0/lib/cucumber/rake/task.rb:193:in `block in define_task'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:205:in `call'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:205:in `block in execute'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:200:in `each'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:112:in `invoke_task'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:90:in `block (2 levels) in top_level'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:90:in `each'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:90:in `block in top_level'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:84:in `top_level'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:62:in `block in run'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:59:in `run'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/bin/rake:32:in `<top (required)>'
/Users/dev/.rbenv/versions/1.9.2-p290/bin/rake:19:in `load'
/Users/dev/.rbenv/versions/1.9.2-p290/bin/rake:19:in `<main>'
Tasks: TOP => cucumber:ok
  

Ответ №1:

Сегодня вечером у меня возникла та же проблема. Похоже, это связано с Rack 1.3.4. Я исправил это, добавив это в свой Gemfile:

 gem 'rack', '1.3.3'
  

Затем выполняется:

 bundle update rack
  

Кстати, я пробовал предложение Божидара до этого, но безрезультатно.

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

1. Из комментариев в common_192.rb («Украдено из uri ruby core / common.rb @ 32618ba для устранения проблем DoS в 1.9.2» и «Вероятно, это следует удалить, как только появится уровень исправления Ruby 1.9.2, который включает это исправление».) похоже, что это было добавлено в rack дляпредотвращение атаки типа «отказ в обслуживании». Он намеренно исправляет уязвимость в Ruby, но исправление приводит к появлению предупреждения «уже инициализированная константа». Таким образом, похоже, что выбор состоит в том, чтобы либо вернуться к 1.3.3, как предложил Даниэль, либо получить исправление и некоторое время мириться с предупреждением.

2. В моем случае предупреждение препятствовало предварительной компиляции конвейера ресурсов, поэтому возврат к 1.3.3 был единственным вариантом.

3. Добавлено исправление для этого — github.com/rack/rack/commit /… — так должно быть в следующем выпуске rack. Если вам по какой-то причине действительно нужна rack 1.3.4, вы могли бы сделать что-то вроде require 'uri/common'; ::URI.send :remove_const, :WFKV_ , прежде чем вам потребуется rack. Это будет работать даже в вашем Gemfile.

4. Просто небольшое замечание: я бы не стал делать обновление пакета, а вместо bundle update rack этого. bundle update захочет обновить все драгоценные камни.

Ответ №2:

Сейчас отсутствует Rack 1.3.5, который исправил это предупреждение.

Ответ №3:

вам следует удалить rake-0.9.2 и установить rack 1.6.13

 gem uninstall rake
gem install  rack 1.6.13
  

Ответ №4:

Итак, я включил:

требуется ‘uri/ common’; ::URI.send :remove_const, :WFKV_

однако комментарий, в котором говорится, что «он будет работать в Gemfile», на самом деле должен гласить «Должен быть в Gemfile».