Selenium モードの Cucumber と WebRat:gem バンドルを使用すると mongrel_rails を開始できません
質問
私は gem Bundler (v.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
ここまでは順調ですね。私はすでに数週間バンドラーをうまく使用しています。ただし、サイトのいくつかの ajaxy 機能をテストするために、Cucumber と WebRat を Selenium モードで使用し始めました。機能を実行するたびに、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 はシステム gem としてインストールされます。Bundle は、他のコンテキストではシステム gem の読み込みを正常に処理しますが、この特定のケースでは、なぜ失敗するのかわかりません:(。
「bundle install」を再度実行しようとしましたが、常に次のように表示されます。
システム宝石から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`
「gem list | grep mongrel」を実行すると、次の結果が得られます。
mongrel (1.1.5)
奇妙な。
gem Bundler を使用しながら Cucumber と WebRat + Selenium を正常に実行できるようにしたいのですが、これには気が狂いそうです。
誰か私を教えてくれませんか?
解決
さて、私は回避策を見つけました。ちょっと怪しいですが、うまくいきます。
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 を見つけてサーバーを起動します。その後、Selenium を使用する Cucumber 機能を実行すると、機能します:)
他の誰かがこの問題について発見したり何か知っている場合は、共有してください。これはどこかのバグになる可能性があります。
他のヒント
私は同様の問題を抱えていたが、それは私の/Users/{account}/.gems/にあったし、どちらか/ライブラリ/ルビー/宝石/(デフォルトのインストールでインストールされたものを何間の宝石のバージョンの不一致であることが判明しました)またはでは/ opt / local / libの/ルビー/宝石/(Macのポート)がインストールされます。私は/Users/{account}/.gems/を削除したとすぐにそれがすべて働いています。
私もこれと同じ問題に遭遇し、デバッグにしばらく時間を費やしました。Mongrel、GemPlugin、Bundler の間には何らかの相互作用があるようです。考えられる解決策は次のとおりです。
- Bundler 0.9 で適切に動作するように GemPlugin を修正しました。
- Mongrel を変更して GemPlugin を使用しないようにします。
- Mongrel 以外の Web サーバーをサポートするように Webrat を変更します。
最近では GemPlugin と Mongrel の両方がやや時代遅れで放棄されているように見えるため、次の内容に基づいて Webrat に Thin サポートを追加することにしました。 このパッチ.
あなたはできる 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 ...
?
ここでのポイントは、システム gemenv からではなく、バンドルからも Rails gem をロードすることです。
ここに書かれた同様のシナリオがあります。mongrel をバンドラーで動作させるにはどうすればよいですか?
働くべきである、現在の宝石の実行ファイルが使用している宝石のディレクトリを検索し、キャッシュや仕様のディレクトリから任意の残留物を削除してみます。