2009-05-01 15 views
1

テストのためにいくつかの新しい宝石をインストールし、初期化されていない定数ActionController :: Dispatcher :: MiddlewareStackエラーが発生しました。私はgem rdocsの指示に従いました。私のenvironment.rbファイルにgemの依存関係を指定し、次にrake gemsを実行しました:installとrake gems:unpack。未初期化定数ActionController :: Dispatcher :: MiddlewareStack

私は自分のenvironment.rbファイルを一度に1行ずつ異なるプロジェクトにコピーしましたが、エラーは発生しませんでした。他にどんなことが起こっているのか不思議でした。

はここでエラーの長いバージョンです(私が最初に簡単なテストを実行中にエラーに走った。私は「active_support」を必要としないときに同じことが、コンソールで起こる):

$ ruby test/unit/user_test.rb 
** has_many_polymorphs: rails environment detected 
/Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:105:in `const_missing': uninitialized constant ActionController::Dispatcher::MiddlewareStack (NameError) 
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/actionpack-2.3.2/lib/action_controller/dispatcher.rb:71 
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' 
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:521:in `new_constants_in' 
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' 
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/has_many_polymorphs-2.13/lib/has_many_polymorphs/autoload.rb:2 
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    ... 8 levels... 
    from ./test/unit/../test_helper.rb:2:in `require' 
    from ./test/unit/../test_helper.rb:2 
    from test/unit/user_test.rb:1:in `require' 
    from test/unit/user_test.rb:1 

はここに私の環境です。 RBファイル(デフォルトのコメントは削除):

RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION 
# config.gem 'has_many_polymorphs', :version => "2.12" 
# require ‘has_many_polymorphs‘ 

# Bootstrap the Rails environment, frameworks, and default configuration 

require File.join(File.dirname(__FILE__), 'boot') 
require 'has_many_polymorphs' 
require 'active_support' 

Rails::Initializer.run do |config| 

    config.time_zone = 'UTC' 


    config.gem "thoughtbot-factory_girl", 
      :lib => "factory_girl", 
      :source => "http://gems.github.com" 


    config.gem 'thoughtbot-shoulda', 
       :lib => false, 
       :source => 'http://gems.github.com' 

end 
+0

私はそれが 'has_many_polymorphs'という行と関係していると思います。私はグーグル 'has_many_polymorphs'レール2.3.2との互換性が何も決定的なものは見つかりませんでした。 – sutee

+0

一度に1つの宝石をインストールしようとしましたか? また、新しい秘密を作成して、それを私たち全員と共有したことがあります。P。 – allyourcode

答えて

2

は、私が以前にいくつかの誤った情報を書いた、しかし、今、私が座って、それが数分間平静を見ることができた、私は私の環境を編集することによって、私の問題を修正しました.rbを移動し、を必要とする 'has _many_polymorphs 'ステートメントの後にイニシャライザブロック。

ビンゴ。私は顔が詰まったハードしかし、これは私たちが学ぶ方法です..

+0

これは、has_many_polymorphsのドキュメントに反するが、これは私にとってはうまくいった。 –

1

上記のスレッドは、上記の答えは開発のために働いていましたが、生産モードに切り替えるとエラーが発生しました。必要なものをイニシャライザブロックの上に置き、Ricのオリジナルの修正を使ってうまくいきました。彼の編集はそれを削除したので、後ろに続く人のために、ここでもまた:BTw - 私は今、johnsbrnブランチよりもhmpでトランクを使用していて、2.3.2でうまく動作するようです。

編集:私の問題を解決しました。その後、同様の問題で移行が破綻したことがわかりました。コードを調べた後、私はすばやくハッキングしました。これには欠落しているクラス(action_controller/middleware_stack)が必要でした。

「johnsbrn-has_many_polymorphs/libに/ has_many_polymorphs/autoload.rb」

と第一2が必要との間で次の行を挿入します。

迅速&不潔修正は、相対パスでファイルを編集することです行:

定義されていない限り 'action_controller/middleware_stack'が必要ですか? ::アクションコントローラ::ミドルウェアスタック

これは次のようになります。

定義されていない限り、「初期化子」が必要ですか? :: Rails :: Initializer

定義されていない限り 'action_controller/middleware_stack'が必要ですか? :: ActionController :: MiddlewareStack

定義されていない限り 'action_controller/dispatcher'が必要ですか? :: ActionController :: Dispatcher

これで問題は解決します。

+0

おっと - 申し訳ありません。まだプロダクションモードで試してみたことがありませんでしたか?(長いdevサイクル!) – Ric8ard

0

環境内。RB:

require File.join(File.dirname(__FILE__), 'boot') 
require 'action_controller/middleware_stack' unless defined? ::ActionController::MiddlewareStack 
require 'has_many_polymorphs' 

作品私

0

ため、私がやったように他の誰かがこのページを閲覧する場合には、私は単に私にそれを1.12.1から1.13に私のhas_many_polymorphs宝石をアップグレードし、再凍結することによって、これを解決ベンダのフォルダ(そして新しいバージョン番号を使用するためにenvironment.rbのconfig.gem行を更新する)。

関連する問題