Search code examples
ruby-on-rails-3ruby-on-rails-3.1rakeruby-on-rails-plugins

How do I create a rake task for a Rails engine which is not exposed to the host application?


# lib/tasks/test.rake
task :hello do
  puts 'hello'
end

$ rake app:hello

To run the task I need to prefix it with "app:" and it runs in the context of the dummy app. It is also exposed to the host application (i.e when used as a plugin in a parent Rails app) as rake hello.

I want to run a rake task which does not require a Rails environment and runs some command, but it is run from the engine root, not the dummy app root.


Solution

  • I know that's a bit late, but for others here searching for the correct answer, do the following :

    Create your task :

    # lib/tasks/your_engine_tasks.rake
    desc "Explaining what the task does"
    task :your_task do
      # Task goes here
    end
    

    Then go to your engine ./Rakefile and add

    load 'lib/tasks/your_engine_tasks.rake'
    

    Here we go, now:

    $ rake -T
    

    gives you your task.

    Hope I helped.