运行 rails dev:cache 带参数

Run rails dev:cache with an argument

Rails 命令 rails dev:cache 切换 Rails 缓存功能是否在本地开发环境中工作。它通过创建或销毁充当功能标志的文件来实现此目的。但是,对于我们的开发设置脚本,我想 运行 命令以便缓存功能始终打开而不是切换。

rails dev:cache 的源代码包括此 enable_by_argument function:

def enable_by_argument(caching)
  FileUtils.mkdir_p("tmp")

  if caching
    create_cache_file
  elsif caching == false && File.exist?(FILE)
    delete_cache_file
  end
end

我如何 运行 rails dev:cache 命令以便它使用此参数? 我尝试了几种变体,包括 rails dev:cache[true] , rails dev:cache\[true\]rails dev:cache true, 但它们都使用了切换行为而不是参数控制行为。

这不是 How to pass command line arguments to a rake task 的重复问题,因为该问题是关于将参数传递给 Rake 任务的。但这是内置于 Rails 中的命令。

默认情况下不可能这样做,因为the original task根本不接受参数。

但是,如果我们稍微改进任务代码,我们可以让它执行您想要的操作。
将其放在 Rakefile:

的末尾
# Remove original task
Rake::Task["dev:cache"].clear

# Reimplement task with new and improved behavior
namespace :dev do
  desc "Toggle development mode caching on/off"
  task :cache, [:enable] do |task, args|
    enable = ActiveModel::Type::Boolean.new.cast(args[:enable])
    if enable.nil?
      # Old behavior: toggle
      Rails::DevCaching.enable_by_file
    else
      # New behavior: by argument
      Rails::DevCaching.enable_by_argument(enable)
      puts "Development mode is #{enable ? 'now' : 'no longer'} being cached."
    end
  end
end

现在您可以使用其中任何一个:

rails dev:cache
rails dev:cache[true]
rails dev:cache[false]