Rails 升级到 rails3.2.0 后,显示 DEPRECATION WARNING

bindiry · 2012年01月21日 · 最后由 bindiry 回复于 2012年03月03日 · 4939 次阅读

升级到 rails 3.2.0 后,rails server 后,显示 DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and will be removed in future releases,simply use Ruby memoization pattern instead. (called from <top (required)> at /var/workspace/yinse/config/application.rb:12)

google 了一下,没搞明白 Ruby memoization 是个啥东东, 请教同学们这个问题应该怎样解决?

application.rb 12 行的内容,对比了一下,和用 rails3.2.0 新建一个项目一样

Bundler.require(*Rails.groups(:assets => %w(development test)))
匿名 #1 2012年01月21日

还没遇到你那个问题。第一个遇到的是 NoMethodError undefined method `include?' for nil:NilClass

匿名 #2 2012年01月21日

http://api.rubyonrails.org/ 你代码里没用到的话,这个没什么好解决的吧,下个版本移除 不知哪位,将 environments 里面的几个多余的空格删了,齐齐整整的 :)

#2 楼 @cless 啊,难道就没办法去掉这个 WARNING 提示了?

是不是应该把 application.rb:12 这一行内容贴出来看看?

#4 楼 @zhangyuan 不好意思,现在帖出来了,不过这行内容和新建一个项目的内容一样,不知道为什么会这样

#4 楼 @zhangyuan 但新建一个项目就没这个 WARNING 提示

ActiveSupport::Memoizable 应该是用来缓存方法结果的模块,源码见 activesupport/lib/active_support/memoizable.rb 这个文件。警告也是从这里出来的。

railties/guides/source/3_2_release_notes.textile 里有一句:

Deprecated ActiveSupport::Memoizable in favor of Ruby memoization pattern.

如果 lz 没有使用

extend ActiveSupport::Memoizable

的话,应该是某个 gem 里使用了 Memoizable,所以有了警告。

update on Jan 22th:

昨晚写错了。应该是 extend ActiveSupport::Memoizable 不是 include ActiveSupport::Memoizable

#7 楼 @zhangyuan 谢谢解答,让你这样一说,还真有可能是某个 Gem 引起的,我挨个去掉测试一下

#8 楼 @bindiry 测试了一下,果然是 carrierwave-mongoid 引起的,只能等待他更新了。

在捣腾 ruby-china 的源码也发现有这个警告提示

#9 楼 @bindiry 可以给他提交个修正啊

等待更新期间,实在很烦的话,权宜之计是可以通过在配置文件里加行 ActiveSupport::Deprecation.silenced = true 来解决

郁闷了 现在 运行 rake assets:precompile

来这个了

DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and will be removed in future releases,simply use Ruby memoization pattern instead. (called from at /home/wasai/projects/ruby-china/config/application.rb:13)

有人尝试 padrino 吗,我有点受不了 rails 的越来越庞大,越来越慢。

#16 楼 @hhuai 很多受不了的都直接转 nodejs 了

#15 楼 @huobazi 多谢提醒,我来更新一下。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号