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