"require 'capybara / rails'" дает "неинициализированную константу Rack :: Builder" - PullRequest
7 голосов
/ 06 января 2012

Я использовал cucumber в своем приложении, которое представляет собой приложение rails 2.2.2, работающее на ruby ​​1.8.6 (обновление сейчас не вариант). Огурец был в порядке, теперь я пытаюсь использовать капибару. Я установил камень capybara (1.1.1) и поместил строку require 'capybara/rails' в свой features/support/env.rb file.

Теперь, когда я запускаю огурец, я получаю эту ошибку:

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.

спасибо, макс.

Ответы [ 3 ]

3 голосов
/ 14 августа 2013

Попробуйте добавить require 'rack/builder' перед require 'capybara/rails' в features/support/env.rb. Версии Rails ниже 2.3 не используют Rack для внутреннего использования, и поэтому Rack :: Builder не будет загружен, как это предполагает капибара.

1 голос
/ 15 марта 2012

Вы использовали камень огурцов-рельсов?

https://github.com/jnicklas/capybara говорит, либо используйте камень, либо, если вы не используете рельсы, вставьте обе эти строки в:

require 'capybara/cucumber'
Capybara.app = MyRackApp
0 голосов
/ 15 августа 2013

попробуйте это

  gem install rack

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

Rack :: Builder определен в библиотеке стойки.

...