3

デフォルトの Rails 2.3 読み込みメカニズムではなく、Bundler を使用して gem を読み込むように Rails 2.3.8 プロジェクトを変更しました。公式の指示に従ったところ、サイトは開発中に問題なく動作しました。私は gem 管理に RVM を使用しており、アプリケーション用に特定の gemset をロードしています。

ただし、私の RSpec テスト スイートは実行できません。さまざまなコマンドを使用して、スイート全体と単一のテストの両方を実行してみました。

autospec # My usual way of running tests
rake spec
spec .
spec spec/models/comment_spec.rb # Trying a single spec file in isolation
ruby spec/models/comment_spec.rb

また、プレフィックスを付けてすべて実行してみましたbundle exec。すべてが同じエラーを返します:

/Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:440:in `load_missing_constant': uninitialized constant InheritedResources::Base (NameError)
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:80:in `const_missing_not_from_s3_library'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing'
    from /Users/casper/Projects/cf/darebusters/app/controllers/admin/base_controller.rb:1
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:158:in `require'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:158:in `require'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:265:in `require_or_load'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:224:in `depend_on'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:136:in `require_dependency'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:414:in `load_application_classes'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:413:in `each'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:413:in `load_application_classes'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:411:in `each'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:411:in `load_application_classes'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:197:in `process'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:113:in `send'
    from /Users/casper/.rvm/gems/ruby-1.8.7-p248@darebusters/gems/rails-2.3.8/lib/initializer.rb:113:in `run'
    from /Users/casper/Projects/cf/darebusters/config/environment.rb:9
    from /Users/casper/Projects/cf/darebusters/spec/spec_helper.rb:5:in `require'
    from /Users/casper/Projects/cf/darebusters/spec/spec_helper.rb:5
    from spec/models/comment_spec.rb:1:in `require'
    from spec/models/comment_spec.rb:1

この問題は Inherited Resources gem に関連していないと確信しています。この時点では gem がまったくロードされておらず、Inherited Resources がたまたま最初に必要になったものであると思います。

私を困惑させているのは、初期化段階で/activesupport-2.3.8/lib/active_support/dependencies.rb:158必要になることです。/app/controllers/admin/base_controllerそれはすべきではありませんし、開発モードでは確かに行いません。gem 'inherited_resources'Gemfile でコメントアウトしても、サイトは引き続き実行されます。継承されたリソースを使用するコントローラーをロードするアクションを実行するまで、「初期化されていない定数」エラーが発生します。

わかりやすくするために、ここに私のGemfile と spec_helper.rb を示します。

4

3 に答える 3

2

さらに古い質問ですが、Bundler 1.0.3、Rspec-Rails 1.3.3、および Rails 2.3.8 で同じ問題が発生し、それを顕著な_レールに要約することができました。Remarkable-Rails は、初期化子が環境によって実行される前に rspec/rails をロードするようです。

Gemfile で :require => nil を追加し、レール環境を要求した後に spec_helper で手動で要求した後、問題は解消されました。

于 2010-10-25T16:57:41.517 に答える
1

これは古い質問だと思いますが、同じ問題に遭遇しました。

アプリケーションに必要な rspec と rspec-rails の 1.3.0 バージョンがありました。rspec-railsの changelog を見ると、1.3.0 以降にいくつかのバグ修正が行われていることに気付きました。rspec-rails を 1.3.2 にアップグレードすると、すべてが修正されました。

于 2010-08-06T16:23:15.357 に答える
1

この問題を修正するために、Gemfile を次のように変更しました。

gem 'rspec-rails', '~> 1.3.2', :require => 'spec/rails'

gem 'rspec-rails', '~> 1.3.2'

私の仕様ヘルパーに以下を追加しました

require 'spec/rails'
于 2011-03-28T00:58:13.930 に答える