如何在rake test中关闭由ruby -w启用的Ruby警告功能?
解决Rake Test自动启用Ruby警告(-w)的问题
我之前也碰到过类似的糟心情况——接手的遗留项目一堆没法修复的警告,单独跑测试套件干干净净,一用rake test就被警告刷屏。其实问题核心就是Rails的默认test rake任务会自动给Ruby命令加上-w参数,强制开启警告系统。下面给你两种解决方案,优先推荐第二种,不用动Rails源码:
方案一:修改Rails源码(不推荐,全局生效)
如果实在要改Rails的源码,你需要找到它定义test任务的地方。不同Rails版本路径略有差异,但大多在railties/lib/rails/tasks/testing.rake文件里。打开这个文件,搜索包含ruby -w的行,把其中的-w删掉就行。不过要注意,这会影响所有使用这个Rails版本的项目,所以除非你所有项目都需要禁用警告,否则别这么干。
方案二:在项目内覆盖Rake任务(推荐,仅当前项目生效)
更稳妥的方式是在自己的项目里重新定义test任务,去掉-w参数。具体步骤:
- 在项目的
lib/tasks目录下新建一个文件,比如disable_test_warnings.rake - 把下面的代码复制进去:
# 先移除原来的test任务 Rake::TaskManager.class_eval do def remove_task(task_name) @tasks.delete(task_name.to_s) end end Rake.application.remove_task('test') # 重新定义test任务,禁用警告参数 Rails::TestTask.new(:test) do |t| t.libs << "test" t.pattern = "test/**/*_test.rb" t.warning = false # 关键配置:关闭-w参数 end
- 保存后,再执行
rake test就不会看到那些烦人的警告了。
另外还有个临时应急技巧:如果你只是想临时禁用一次,也可以在执行命令时设置环境变量RUBYOPT=-W0,比如:
RUBYOPT=-W0 rake test
这个方法不用改任何代码,适合临时快速解决问题。
内容的提问来源于stack exchange,提问作者Phlip
相关产品推荐
相关产品推荐

