1

我安装了一些新的 gem 进行测试并遇到了未初始化的常量 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

4 回答 4

2

我之前写了一些误导性的信息,但是,现在我设法坐下来不受干扰地看了几分钟,我通过编辑我的 environment.rb 来解决我的问题,并将require 'has_many_polymorphs'语句移到初始化程序之后堵塞。

答对了。我用力捂脸,但这就是我们学习的方式..

于 2009-05-03T17:02:45.893 回答
1

关注这个线程有一段时间了 - 上面 ric 的回答在开发中对我们有用,但切换到生产模式会导致错误。将 require 放回初始化程序块上方并使用 Ric 的原始修复工作正常。他的编辑已将其删除-因此对于后面的任何人来说,这里又是:顺便说一句-我们现在在 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

例如,它最终看起来像这样:

除非定义,否则需要“初始化程序”?::Rails::初始化器

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

除非定义,否则需要'action_controller/dispatcher'?::ActionController::调度程序

现在一切正常。

于 2009-08-05T16:25:56.533 回答
0

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

于 2010-02-02T12:43:40.407 回答
0

在 environment.rb 中:

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

为我工作

于 2010-01-24T09:43:48.883 回答