未初始化的常量ActionController :: Dispatcher :: MiddlewareStack

时间:2009-05-01 04:11:57

标签: ruby-on-rails environment actioncontroller

我安装了一些新的测试宝石,并遇到了一个未初始化的常量ActionController :: Dispatcher :: MiddlewareStack错误。我按照gem rdocs上的说明指定了我的environment.rb文件中的gem依赖项,然后运行了rake gems:install和rake gems:unpack。

我还将我的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

这是我的environment.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

4 个答案:

答案 0 :(得分:2)

我以前写了一些被误导的信息,然而,现在我已经设法坐下来看了几分钟不受干扰,我通过编辑我的environment.rb来解决我的问题,然后移动 require'has_many_polymorphs 初始化程序段后语句。

宾果。我面对的是艰难,但这就是我们学习的方式..

答案 1 :(得分:1)

已经关注这个帖子了一段时间 - 上面的ric回答在开发中对我们有用,但是切换到生产模式会导致错误。将需求放回初始化程序块上方并使用Ric的原始修复工作正常。他的编辑删除了它 - 所以对于跟在后面的任何人,这里又是:BTW - 我们现在在hmp上使用trunk而不是johnsbrn分支,这似乎与2.3.2现在正常工作

编辑:它几乎解决了我的问题。后来我发现迁移破坏了类似的问题。在查看代码之后,我很快就找到了答案,其中涉及要求缺少的类(action_controller / middleware_stack)。

快速&肮脏的修复是在相对路径下编辑文件:

“johnsbrn-has_many_polymorphs / LIB / has_many_polymorphs / autoload.rb”

并在前两个需求行之间插入以下行:

除非定义,否则需要'action_controller / middleware_stack'? ::的ActionController :: MiddlewareStack

e.g。最终看起来像这样:

除非定义,否则需要'初始化'? ::滑轨::初始化程序

除非定义,否则需要'action_controller / middleware_stack'? ::的ActionController :: MiddlewareStack

除非定义,否则需要'action_controller / dispatcher'? ::的ActionController ::分派器

现在一切正常。

答案 2 :(得分:0)

在environment.rb中:

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

适合我

答案 3 :(得分:0)

如果其他人像我一样浏览此页面,我只需将我的has_many_polymorphs gem从1.12.1升级到1.13并将其重新冻结到我的供应商文件夹(并更新环境中的config.gem行)即可解决此问题。 rb使用新版本号。)