Sco*_*ttJ 12 ruby ruby-on-rails ruby-1.9
我正在升级我的Rails应用程序以使用Ruby 1.9并且我一直遇到这样的错误:
Anonymous modules have no name to be referenced by
/home/foo/.gem/ruby/1.9.1/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:585:in `to_constant_name'
/home/foo/.gem/ruby/1.9.1/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:391:in `qualified_name_for'
/home/foo/.gem/ruby/1.9.1/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:104:in `rescue in const_missing'
/home/foo/.gem/ruby/1.9.1/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:94:in `const_missing'
/home/foo/app/config/environment.rb:66:in `block in <top (required)>'
etc.
Run Code Online (Sandbox Code Playgroud)
谷歌为此找到了各种各样的点击,但每个点击都针对一个特定的宝石或应用程序的特定修复.他们都没有解释这个消息的真正含义.
environment.rb的第66行是super_exception_notifier(旧版本,2.0.8)的配置:
ExceptionNotifier.configure_exception_notifier do |config|
config[:sender_address] = %("Foo" <foo@foo.com>)
config[:exception_recipients] = %w(foo@foo.com)
config[:skip_local_notification] = false
end
Run Code Online (Sandbox Code Playgroud)
据我所知,ExceptionNotifier是未定义的,ActiveSupport试图神奇地加载它,但是失败然后再次尝试打印一个很好的错误消息失败.
匿名模块是一个声明如下的模块:
Fred = Module.new do
def meth1
"hello"
end
def meth2
"bye"
end
end
Run Code Online (Sandbox Code Playgroud)
而不是使用常规Module mod_name <block>语法.由于它们没有模块名称,因此无法检索模块名称. to_constant_name试图调用desc.name.blank?这里desc是一个匿名模块(无name).
此错误来自ActiveSupport模块,该模块可能表示active_support gem中存在错误,或者可能表示某些其他代码错误地使用了ActiveSupport.单独的错误消息没有提供足够的信息来识别罪魁祸首(至少对我来说,拥有更多铁路经验的人可能能够提供更多的洞察力).
在不知道违规代码的情况下,很难确切地说出为什么这个错误会突然出现1.9,或者需要做些什么来修复它.考虑到有很多未维护和维护不足的宝石尚未针对1.9进行更新,我怀疑ActiveSupport不是问题的根源.升级所有具有1.9兼容版本的宝石,然后尝试一次禁用其他宝石(如果可以),看看是否仍然出现错误.
如果您提供正在使用的其他宝石的列表,则之前可能遇到此错误的其他人可能能够提供一些详细信息.
| 归档时间: |
|
| 查看次数: |
4434 次 |
| 最近记录: |