Search code examples
rubyrakerakefile

Check if rake task exists from within Rakefile


I'm looking for a way to be able to check if a certain rake task exists from within the Rakefile. I have a task dependency that I only want to include as a dependency if that task is available. In this particular case, the task is only available in a Rails project, but I want my rake tasks to work in a more general Ruby application environment too (not just Rails).

I want to do something like this:

if tasks.includes?('assets:precompile')
  task :archive => [:clean, :vendor_deps, 'assets:precompile']
    ...
  end
else
  task :archive => [:clean, :vendor_deps]
    ...
  end
end

What is the best way to conditionally include a task dependency in a rake task?


Solution

  • what about doing something like this? Invoke the task if it exists, as opposed to making it an explicit dependency?

     task :archive => [:clean, :vendor_deps] do 
      Rake.application["assets:precompile"].invoke if Rake::Task.task_defined?('assets:precompile')
       .... 
      end
    

    or even easier. Since specifying the task again allows you to add to it, something like this appears to work as well.

    task :archive => [:clean, :vendor_deps] do
        ...
      end
    task :archive => "assets:precompile" if  Rake::Task.task_defined?("assets:precompile")
    

    which will conditionally add the dependency on assets:precompile if it is defined.