2009-05-01 118 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行以使用新版本号)。

相关问题