Огурец и свинина в режиме Selenium:Не удается запустить mongrel_rails при использовании gem bundle
Вопрос
Я использую gem bundler (версия 0.9.6) и Rails 2.3.5, rubygems 1.3.6 и ruby 1.8.7 (на 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
Пока все идет хорошо.Я успешно использую bundler уже пару недель.Однако я начал использовать Cucumber и WebRat в режиме Selenium для тестирования некоторых функций ajaxy сайта, и всякий раз, когда я запускал эту функцию, WebRat сообщал мне, что сервер Rails запущен, но я всегда получал XHR_ERROR, где Selenium не мог найти URL. Ну, так получилось, что сервер не был запущен.
Затем я открыл файл webrat /lib/webrat/selenium/application_servers/rails.rb и поместил инструкцию отладчика в метод start.Запустил функцию снова, когда сработал отладчик, я напечатал возврат 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 отлично обрабатывает загрузку системных драгоценных камней в другом контексте, но в данном конкретном случае я понятия не имею, почему это не удается : (.
Я попытался снова запустить "bundle install", и он всегда говорит:
Установка mongrel (1.1.5) из системы драгоценные камни
Я попытался удалить mongrel из системы, чтобы попробуйте создать bundle, чтобы установить его на ~/.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 при использовании gem bundler, но это сводит меня с ума.
Кто - нибудь мог бы меня просветить ?
Решение
Ну, я нашел обходной путь, немного сомнительный, но работающий:
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
Он найдет mongrel и запустит сервер, затем вы можете запустить функцию Cucumber, которая использует Selenium, и она будет работать :)
Если кто-то еще узнает или знает что-нибудь еще об этой проблеме, пожалуйста, поделитесь, возможно, это где-то ошибка.
Другие советы
У меня была похожая проблема, но оказалось, что версии gems не соответствуют тем, что были в моем / Users / {account} /.gems /, и тем, что было установлено либо в /Library /Ruby /Gems / (установка по умолчанию), либо в /opt/local /lib / ruby /gems / (установка портов Mac).Как только я удалил /Users/{account}/.gems/, все заработало.
Я столкнулся с этой же проблемой и потратил некоторое время, пытаясь ее отладить.Похоже, что существует какое-то взаимодействие между Mongrel, GemPlugin и Bundler.Возможные решения включают:
- Исправьте GemPlugin, чтобы он хорошо играл с Bundler 0.9.
- Измените Mongrel, чтобы он больше не использовал GemPlugin.
- Измените Webrat для поддержки веб-сервера, отличного от Mongrel.
Поскольку и GemPlugin, и Mongrel в наши дни выглядят несколько устаревшими и заброшенными, я решил добавить тонкую поддержку 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
bundle exec mongrel_rails start ...
?
Смысл здесь в том, чтобы загрузить rails gems также из пакета, а не из системного gemenv.
У нас есть похожий сценарий, который был написан здесь:Как заставить mongrel работать с bundler?
Попробуйте найти каталог gems, который использует текущий исполняемый файл gem, и удалите все остатки из кэша или каталогов спецификаций, это должно сработать.