分享 如何寻找项目里面 DEPRECATION WARNING

huacnlee · 2016年06月20日 · 最后由 ruby_sky 回复于 2016年06月20日 · 3300 次阅读

每次当你升级 Rails 大版本以后,你可能会遇到这样的东西:

DEPRECATION WARNING: before_filter is deprecated and will be removed in Rails 5.1. Use before_action instead. (called from <top (required)> at /Users/jason/work/ruby-china/config/environment.rb:5)
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from <top (required)> at /Users/jason/work/ruby-china/config/environment.rb:5)
DEPRECATION WARNING: before_filter is deprecated and will be removed in Rails 5.1. Use before_action instead. (called from <top (required)> at /Users/jason/work/ruby-china/config/environment.rb:5)
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from <top (required)> at /Users/jason/work/ruby-china/config/environment.rb:5)

DEPRECATION WARNING 是 Rails 设计用来提醒大家将会有一些废弃的方法,这些提醒的方法目前还能使用,但会在未来的某一个版本或时间点移除掉。

我们可能很容易在自己的代码中找到这些废弃的方法,并修改掉,但像上面例子中给出的,压根就不是我们自己的问题,而是 Gem 里面的问题(environment.rb:5 是 require gems 的代码)。

这就难了,一个项目中那么多 Gem,怎么找啊...

你可以这样,用 bundle 把 Gem 装到项目下面,然后用工具打开,全局搜索项目

$ bundle install --path vendor/bundle
$ mate vendor/bundle

这样就知道哪些 Gem 引发的了,然后就好办了,尝试看看 Gem 是不是有新版本修复了,或者你也可以尝试修复,给 Gem 提交 PR。

class_eval 之类定义出来的方法依然找不到

然后发现上面的提示是 Turbolinks 2.5.3 的 😧 😨 于是不得不升级 5.0.0.beta2 了 🚀

bundle open xxx

SublimeText:

Command + Shift + F

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