Cucumber и WebRat в режиме Selenium: не удается запустить mongrel_rails при использовании пакета gem

Я использую сборщик гемов (v.0.9.6) и Rails 2.3.5, rubygems 1.3.6 и ruby ​​1.8.7 (On Snow Leopard). Мой Gemfile выглядит так:

source :rubyforge
source "http://gems.github.com"

gem "rails", "2.3.5"
gem "ruby-debug"
gem "activemerchant", :require => 'active_merchant'
gem "hpricot"
gem "nokogiri"
gem "state_machine"
gem "fastercsv"
gem "yubikey"
gem "httparty"
gem "ruby-openid"
gem "mongrel" 

group :development do 
  gem 'mongrel'
end

#teste
group :test do
  gem 'rspec'  
  gem 'rspec-rails'
  gem 'cucumber' 
  gem 'cucumber-rails'
  gem "mechanize"
  gem 'notahat-machinist', :require => 'machinist'
  gem 'faker'
  gem 'webrat'
  gem 'selenium-client'
  gem 'database_cleaner'
  gem 'fakeweb'
  gem 'mongrel' #Selenium needs this
end

Все идет нормально. Уже пару недель успешно пользуюсь бандлером. Однако я начал использовать Cucumber и WebRat в режиме Selenium для тестирования некоторых функций ajaxy на сайте, и всякий раз, когда я запускал эту функцию, WebRat сообщал мне, что сервер Rails запущен, но я всегда получал XHR_ERROR, где Selenium не мог не нашел URL. Что ж, случилось так, что сервер не запускался.

Затем я открыл файл webrat / lib / webrat / selenium / application_servers / rails.rb и поместил оператор отладчика в метод запуска. Запустите эту функцию снова, когда сработал отладчик, я распечатал возврат start_command def, который был:

mongrel_rails start -d --chdir='/Users/fullofcaffeine/Projetos/myproject' --port=3001 --environment=test --pid /Users/fullofcaffeine/Projetos/myproject/tmp/pids/mongrel_selenium.pid 

Я скопировал и вставил его в консоль, удалил -d и & с конца, и вот результат, который я получил:

** Rails loaded.
** Loading any Rails specific GemPlugins
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require': no such file to load -- /Users/fullofcaffeine/.bundle/ruby/1.8/gems/mongrel-1.1.5/lib/mongrel/init.rb (MissingSourceFile)
 from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
 from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:521:in `new_constants_in'
 from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
 from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/gem_plugin-0.2.3/lib/gem_plugin.rb:134:in `load'
 from /Library/Ruby/Site/1.8/rubygems/source_index.rb:241:in `each'
 from /Library/Ruby/Site/1.8/rubygems/source_index.rb:241:in `each'
 from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/gem_plugin-0.2.3/lib/gem_plugin.rb:112:in `load'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:231:in `load_plugins'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:117:in `cloaker_'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:149:in `call'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:149:in `listener'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:99:in `cloaker_'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:50:in `call'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:50:in `initialize'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `new'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `run'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run'
 from /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281
 from /usr/bin/mongrel_rails:19:in `load'
 from /usr/bin/mongrel_rails:19

Проверьте путь, по которому он пытается загрузить mongrel: "~ / .bundle / ...", но mongrel установлен как системный гем. Bundle отлично справляется с загрузкой системных драгоценных камней в другом контексте, но в этом конкретном случае я понятия не имею, почему он не работает :(.

Я попытался снова запустить «установку пакета», и он всегда говорит:

Установка mongrel (1.1.5) из системных гемов

Я попытался удалить mongrel из системы, чтобы попытаться создать пакет, чтобы установить его в ~ / .bundle (поскольку это кажется источником ошибки, так как mongrel ищется по этому пути Я запускаю mongrel_rails, как указано выше), но у меня просто не получалось.

gem uninstall mongrel
ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d mongrel`

И когда я запускаю «список драгоценных камней | grep mongrel», я получаю:

mongrel (1.1.5)

Странный.

Я просто хочу иметь возможность успешно запускать Cucumber и WebRat + Selenium при использовании сборщика гемов, но это сводит меня с ума.

Может ли кто-нибудь просветить меня?


person FullOfCaffeine    schedule 02.03.2010    source источник


Ответы (5)


Что ж, я нашел обходной путь, довольно подозрительный, но работает:

 cp  /Library/Ruby/Gems/1.8/gems/mongrel-1.1.5/ mongrel-1.1.5

Теперь, если вы попытаетесь:

mongrel_rails start --chdir='/Users/fullofcaffeine/Projetos/myproject' --port=3001 --environment=test --pid /Users/fullofcaffeine/Projetos/myproject/tmp/pids/mongrel_selenium.pid

Он найдет дворнягу и запустит сервер, затем вы можете запустить функцию Cucumber, которая использует Selenium, и она будет работать :)

Если кто-то еще узнает или знает что-нибудь еще об этой проблеме, поделитесь, пожалуйста, это может оказаться где-то ошибкой.

person FullOfCaffeine    schedule 02.03.2010
comment
Не могли бы вы проверить, загружает ли этот обходной путь все драгоценные камни рельсов из пакета? Или дворняга и все активные * драгоценные камни в конечном итоге загружаются из системы gemenv? - person tribalvibes; 07.10.2010

У меня была аналогичная проблема, но оказалось, что версии гемов несовместимы между тем, что было в моем /Users/{account}/.gems/, и тем, что было установлено либо в / Library / Ruby / Gems / (установка по умолчанию), либо в / opt / local / lib / ruby ​​/ gems / (установка портов Mac). Как только я удалил /Users/{account}/.gems/, все заработало.

person Ed Zavada    schedule 02.03.2010

Я столкнулся с той же проблемой и некоторое время пытался ее отладить. Похоже, что есть какое-то взаимодействие между Mongrel, GemPlugin и Bundler. Возможные решения включают:

  1. Исправьте GemPlugin, чтобы он работал нормально с Bundler 0.9.
  2. Измените Mongrel, чтобы больше не использовать GemPlugin.
  3. Измените Webrat для поддержки веб-сервера, отличного от Mongrel.

Поскольку и GemPlugin, и Mongrel в наши дни выглядят несколько устаревшими и заброшенными, я решил добавить поддержку Thin в Webrat на основе этот патч.

Вы можете найти новый патч на github или добавить следующее в свой Gemfile:

gem 'webrat', :git => 'git://github.com/emk/webrat.git'

... и обновите файл features / support / env.rb соответственно:

Webrat.configure do |config|
  # Add this line.
  config.application_framework = :rails_thin

  # Your previous configuration here...
end
person emk    schedule 21.04.2010

bundle exec mongrel_rails start ... ?

Дело здесь в том, чтобы загружать гемы rails из бандла, а не из системы gemenv.

У нас есть похожий сценарий, описанный здесь: Как заставить дворнягу работать с бандлером ?

person tribalvibes    schedule 07.10.2010

Попробуйте найти каталог gems, который использует текущий исполняемый файл gem, и удалите все остатки из каталогов кеша или спецификаций, которые должны работать.

person Raja    schedule 27.07.2010