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

How can I disable the trace in rake tasks?

我不确定这是什么时候开始的,但是每当我 运行 在 Rails 中执行抽佣任务时:

$ rake routes

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

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

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

有没有办法禁用跟踪功能? Rails 中是否有可能启用我不知道的跟踪的配置文件?

问题已被追踪到实现 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 最终要求 capistrano-lib/capistrano/all.rb 为所有 Rake 任务设置跟踪。

解决方案是简单地将 require: false 添加到自定义 gem.

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