【问题标题】:Rake "already initialized constant WFKV_" warning耙“已经初始化常量WFKV_”警告
【发布时间】:2011-11-29 07:02:59
【问题描述】:

尝试运行 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

【问题讨论】:

    标签: ruby rake


    【解决方案1】:

    今天晚上我开始遇到同样的问题。它似乎与 Rack 1.3.4 有关。我通过将它添加到我的 Gemfile 来修复它:

    gem 'rack', '1.3.3'
    

    然后运行:

    bundle update rack
    

    顺便说一下,在此之前我尝试过Bozhidar的建议,但没有成功。

    【讨论】:

    • 来自 common_192.rb 中的 cmets(“从 ruby​​ 核心的 uri/common.rb @32618ba 窃取以修复 1.9.2 中的 DoS 问题”和“一旦有 Ruby 1.9,这可能应该被删除.2 补丁级别,包括此修复。”)看起来好像已将其添加到机架以防止拒绝服务攻击。它故意对 Ruby 中的漏洞进行修补,但猴子修补会导致“已初始化常量”警告。所以看起来选择要么按照 Daniel 的建议恢复到 1.3.3,要么得到修复并忍受一段时间的警告。
    • 在我的例子中,警告是阻止资产管道预编译,所以恢复到 1.3.3 是唯一的选择。
    • 已添加对此的修复 - github.com/rack/rack/commit/… - 所以它应该在机架的下一个版本中。如果您出于某种原因确实需要机架 1.3.4,您可以在需要机架之前执行require 'uri/common'; ::URI.send :remove_const, :WFKV_ 之类的操作。它甚至可以在您的 Gemfile 中使用。
    • 只是一个小提示:我不会进行捆绑更新,而是bundle update rackbundle update 将要更新所有宝石。
    【解决方案2】:

    Rack 1.3.5 现已发布,已修复此警告。

    【讨论】:

      【解决方案3】:

      你应该卸载 rake-0.9.2 并安装机架 1.6.13

      gem uninstall rake
      gem install  rack 1.6.13
      

      【讨论】:

        【解决方案4】:

        所以,我包括:

        需要'uri/common'; ::URI.send :remove_const, :WFKV_

        然而,“它将在 Gemfile 中工作”的注释实际上应该读作“必须在 Gemfile 中。”

        【讨论】:

          猜你喜欢
          • 2011-12-01
          • 2011-01-02
          • 2011-08-29
          • 1970-01-01
          • 2012-10-08
          • 1970-01-01
          • 2013-09-24
          • 1970-01-01
          • 2011-08-20
          相关资源
          最近更新 更多