Engine に Rake タスクを追加する
# lib/tasks/my_engine_tasks.rake desc "hello task in my engine" task hello: :environment do puts "hello" end
エンジンのディレクトリからは rails app:hello
、エンジンを取り込んだアプリケーションのディレクトリからは rails hello
でタスクを実行できる。
$ cd my_engine $ rails -T ... rails app:hello # hello task in my engine ... $ rails app:hello hello $ cd test/dummy $ rails -T ... rails hello # hello task in my engine ... $ rails hello hello
参考:
アプリケーションから見えるタスクに名前空間を付ける
# lib/tasks/my_engine_tasks.rake def in_engine? Rails.root.to_s.start_with?(MyEngine::Engine.root.to_s) end def engine_namespace(&block) if in_engine? then yield else namespace :my_engine, &block end end engine_namespace do desc "hello task in my engine" task hello: :environment do puts "hello" end end
エンジンのディレクトリからは rails app:hello
、test/dummy ディレクトリからは rails hello
、エンジンを取り込んだアプリケーションのディレクトリからは rails my_engine:hello
でタスクを実行できる。
$ cd my_app $ rails -T ... rails my_engine:hello # hello task in my engine ... $ rails my_engine:hello hello $ cd my_engine $ rails -T ... rails app:hello # hello task in my engine ... $ rails app:hello hello $ cd test/dummy $ rails -T ... rails hello # hello task in my engine ... $ rails hello hello