2009-05-01 168 views
1

我安裝了一些用於測試的新寶石,並遇到未初始化的常量ActionController :: Dispatcher :: MiddlewareStack錯誤。我遵循關於gem rdocs的說明 - 在我的environment.rb文件中指定了gem依賴項,然後運行rake gems:install和rake gems:unpack。未初始化的常量ActionController :: Dispatcher :: MiddlewareStack

我還將我的environment.rb文件一次一行地複製到不同的項目中,但沒有收到錯誤消息。我想知道還有哪些事情可能會出錯。

以下是錯誤的一個更長的版本(我第一次跑進運行一個簡單的測試誤差;同樣的事情發生在一個控制檯時,我確實需要「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'行。我GOOGLE'has_many_polymorphs'與rails 2.3.2的兼容性,但沒有發現任何明確的。 – sutee 2009-05-01 09:09:53

+0

您是否嘗試過每次安裝一顆寶石? 此外,您可能希望創建一個新的祕密,現在您已經與我們所有人分享了它:P。 – allyourcode 2009-05-02 06:31:30

回答

2

我以前寫的一些誤導的信息,不過,現在我已經成功地坐下來,看它不打擾了幾分鐘,我通過編輯我的環境固定我的問題.rb,並且移動需要'has _many_polymorphs'聲明到初始化塊。

賓果。我面對,但這是我們如何學習..

+0

這對我很有用,即使它與has_many_polymorphs文檔相反。 – 2009-07-21 18:07:49

1

一直沿着這個線程一會兒 - ric的答案上面的工作在我們的發展,但切換到生產模式,這導致了一個錯誤。將需求放回初始化程序塊上方並使用Ric的原始修補程序運行正常。他的編輯已經刪除它 - 所以對於任何後面的人,這裏又是:順便說一句 - 我們現在在hmp而不是johnsbrn分支上使用trunk,並且似乎與2.3.2一起正常工作

編輯:它差不多爲我解決了這個問題。之後我發現遷移帶來了類似的問題。在仔細查看代碼之後,我迅速抨擊了一個答案,其中涉及要求缺少的類(action_controller/middleware_stack)。

快速&骯髒的解決辦法是編輯的相對路徑下的文件:

「johnsbrn-has_many_polymorphs/lib目錄/ has_many_polymorphs/autoload.rb」

,並插入一日2要求的以下行行:

需要'action_controller/middleware_stack'除非定義? :: ActionController :: MiddlewareStack

例如它最終看起來像這樣:

要求「初始化」,除非定義? :: Rails :: Initializer

除非定義,否則需要'action_controller/middleware_stack'? :: ActionController :: MiddlewareStack

需要'action_controller/dispatcher'除非定義? :: ActionController :: Dispatcher

現在事情工作正常。

0

在環境中。RB:

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

作品對我來說

0

萬一別人瀏覽這個網頁像我一樣,我解決了這個僅僅通過我的has_many_polymorphs寶石升級從1.12.1到1.13並重新凍結它變成我的供應商文件夾(並更新environment.rb中的config.gem行以使用新版本號)。

相關問題