1

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 機能をテストするために Selenium モードで Cucumber と WebRat を使い始めました。この機能を実行している間はいつでも、WebRat は Rails サーバーが起動したことを教えてくれましたが、常に XHR_ERROR が発生しました。 URLが見つかりません。さて、たまたまサーバーが起動していませんでした。

次に、webrat/lib/webrat/selenium/application_servers/rails.rb ファイルを開き、start メソッドに debugger ステートメントを追加しました。機能を再度実行し、デバッガーがトリガーされたときに、次のような 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」を再度実行しようとしましたが、常に次のように表示されます。

システム gems から mongrel (1.1.5) をインストールする

~/.bundle にインストールするためのバンドルを作成するために 、システムから mongrel をアンインストールしようとしました(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 を正常に実行できるようにしたいだけですが、これは私を夢中にさせています。

誰でも私を啓発できますか?

4

5 に答える 5

0

まあ、私は回避策、一種の怪しいものを見つけましたが、うまくいきます:

 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

雑種を見つけてサーバーを起動し、Seleniumを使用するCucumber機能を実行すると機能します:)

他の誰かがこの問題について何か他のことを見つけたり知っている場合は、共有してください。これはどこかのバグになる可能性があります。

于 2010-03-02T04:41:33.537 に答える
0

bundle exec mongrel_rails start ...

ここでのポイントは、システムgemenvからではなく、バンドルからrailsgemをロードすることです。

ここに書かれた同様のシナリオがあります: 雑種をバンドラーで動作させる方法は?

于 2010-10-07T00:32:33.307 に答える
0

同様の問題がありましたが、 /Users/{account}/.gems/ にあるものと /Library/Ruby/Gems/ (デフォルトのインストール) または/opt/local/lib/ruby/gems/ (Mac Ports のインストール)。/Users/{account}/.gems/ を削除するとすぐに、すべて機能しました。

于 2010-03-02T20:15:07.730 に答える
0

現在の gem 実行可能ファイルが使用している gems ディレクトリを見つけて、キャッシュまたは仕様ディレクトリから残留物を削除してみてください。これでうまくいくはずです。

于 2010-07-27T22:07:24.107 に答える
0

私はこれと同じ問題に遭遇し、それをデバッグしようとしました。Mongrel、GemPlugin、Bundler の間に何らかの相互作用があるようです。可能な解決策は次のとおりです。

  1. Bundler 0.9 で問題なく動作するように GemPlugin を修正しました。
  2. Mongrel を変更して、GemPlugin を使用しないようにします。
  3. 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
于 2010-04-21T12:45:57.710 に答える