我安装了一些新的测试宝石,并遇到了一个未初始化的常量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
答案 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使用新版本号。)