【问题标题】:"require 'capybara/rails'" gives "uninitialized constant Rack::Builder"“require 'capybara/rails'”给出“未初始化的常量 Rack::Builder”
【发布时间】:2013-08-18 04:43:11
【问题描述】:

我一直在我的应用程序中使用 cucumber,这是一个在 ruby​​ 1.8.6 中运行的 rails 2.2.2 应用程序(现在不能升级)。黄瓜很好,现在我正在尝试使用水豚。我已经安装了capybara (1.1.1) gem 并将require 'capybara/rails' 行放在我的features/support/env.rb file 中。

现在,当我运行 cucumber 时,出现此错误:

Using the default profile...
uninitialized constant Rack::Builder (NameError)
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:445:in `load_missing_constant'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:77:in `const_missing'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/capybara-1.1.1/lib/capybara/rails.rb:4
/home/max/.rvm/rubies/ruby-1.8.6-p420/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
/home/max/.rvm/rubies/ruby-1.8.6-p420/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:155:in `require'
/home/max/work/charanga/elearn_container/elearn/features/support/env.rb:10
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/rb_support/rb_language.rb:143:in `load'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/rb_support/rb_language.rb:143:in `load_code_file'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:171:in `load_file'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:83:in `load_files!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:82:in `each'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime/support_code.rb:82:in `load_files!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime.rb:137:in `load_step_definitions'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/runtime.rb:39:in `run!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/cli/main.rb:43:in `execute!'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/../lib/cucumber/cli/main.rb:20:in `execute'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/cucumber-1.1.1/bin/cucumber:14
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/bin/cucumber:19:in `load'
/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/bin/cucumber:19

这是错误文件:

#/home/max/.rvm/gems/ruby-1.8.6-p420@elearning-resource/gems/capybara-1.1.1/lib/capybara/rails.rb
require 'capybara'
require 'capybara/dsl'

Capybara.app = Rack::Builder.new do
  map "/" do
    if Rails.version.to_f >= 3.0
      run Rails.application  
    else # Rails 2
      use Rails::Rack::Static
      run ActionController::Dispatcher.new
    end
  end
end.to_app

Capybara.asset_root = Rails.root.join('public')
Capybara.save_and_open_page_path = Rails.root.join('tmp/capybara')

因此,第 4 行正在使用 Rack::Builder.new 行创建错误。但为什么?有任何想法吗?我已经安装了 Rack gem。

谢谢,马克斯

【问题讨论】:

  • 有一个类似的问题,只要我添加了 spec/spec_helper.rb 行 require 'capybara/rails' 我收到错误消息 '/vendor/rails/activesupport/lib/active_support/dependencies .rb:445:in `load_missing_constant': 未初始化的常量 Rack::Builder (NameError)'
  • 升级到 1.8.7 不是一个选项,还是升级到 1.9/2.0?它可能会解决您的问题。

标签: ruby-on-rails cucumber capybara


【解决方案1】:

尝试在features/support/env.rb 中的require 'capybara/rails' 之前添加require 'rack/builder'。低于 2.3 的 Rails 版本不会在内部使用 Rack,因此不会像 capybara 假设的那样加载 Rack::Builder。

【讨论】:

    【解决方案2】:

    您是否使用了 cucumber-rails gem?

    https://github.com/jnicklas/capybara 说,要么使用 gem,要么,如果你没有使用 rails,把这两行都放进去:

    require 'capybara/cucumber'
    Capybara.app = MyRackApp
    

    【讨论】:

    • 这不是黄瓜测试运行器,因此这个答案对我没有帮助。
    【解决方案3】:

    试试这个

      gem install rack
    
      require 'rack' # in features/support/env.rb before every require
    

    Rack::Builder 在机架库中定义。

    【讨论】:

    • @Paul,Rack::Builder 在机架库中定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多