如何在rake任务中禁用跟踪?

时间:2018-11-20 13:38:18

标签: ruby-on-rails rake

我不确定何时启动,但是每当我在Rails中运行rake任务时:

$ rake routes

在打印路线之前,它会显示跟踪:

** Invoke routes (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute routes

我认为只有在我的命令中添加--trace时才会出现那些invoke / execute语句,但这在我所有的rake任务(db create / migrate,Capistrano等)中都会发生

是否可以禁用跟踪功能? Rails中是否有一个配置文件可能启用了我不知道的跟踪?

1 个答案:

答案 0 :(得分:0)

该问题已被追溯到实现Capistrano插件的自定义gem。该gem允许Capistrano使用不同的版本控制系统,而不是它们提供的版本控制系统(Git,SVN等)。

最终的问题是capistrano/lib/capistrano/all.rb包含以下行:

Rake.application.options.trace = true

此文件已随Capistrano插件一起加载,但是直到在Capfile中使用默认文件后,它们才是默认文件。当我们使用新插件创建自定义gem时,我们只是将新gem添加到了应用程序的Gemfile中,该默认情况下会加载文件。因此我们的插件文件如下所示:

# custom_gem/lib/capistrano/scm/custom_vc.rb
require 'capistrano/scm/plugin'
class Capistrano::SCM::CustomVC < Capistarno::SCM::Plugin
  # ... Mimic the capistrano/lib/capistrano/scm/git.rb in the Capistrano gem.
end

需要capistrano/scm/plugin的最上一行最终要求为所有Rake任务启用跟踪的capistrano-lib/capistrano/all.rb

解决方案是将require: false简单地添加到自定义gem的Gemfile中。

# Gemfile
group :development do
  gem 'capistrano_custom_vc', require: false
end