Rake
#ruby
概要
lib/tasks/*.rake
rakeタスクの作成
$ rails generate task namespace task_name
code:ruby
namespace :sample do
desc "TODO"
task foo: :environment do
end
end
依存タスク(Prerequisites)
Rakeタスクは「依存タスク(prerequisite tasks)を先に実行してから本体を実行する」仕組みがある
task :A => [:B, :C]の場合は(B->C)が実行されてからAが実行される
/icons/point.iconRailsでの :environment の意味
:environment が重要で、これを付けることで「Railsアプリを起動した上で処理できる」
Railsプロジェクトでは :environment というタスクが標準で定義されている。
実行すると:
Railsアプリケーションを読み込む
config/environment.rb が走る
ActiveRecordやモデル、設定値が使える状態になる
だから DB操作やモデルを扱うタスクでは必ず :environment をPrerequisiteにするのが基本
コマンド
$ rake -T
$ rake --tasks
現在定義されてるtask一覧
$ rails -T
$ rails db:create
とかもrakeタスク
$ rails g task ファイル名
lib/tasks配下にrakeタスク作成
タスクの設計原則
薄いRake、厚いサービス
ビジネスロジックはPOROに閉じ込めてタスクは呼び出しのみ
冪等性
環境の切り替えと安全装置
危険なタスクはプロダクションで走らない仕掛け
abort "Never run in production!" if Rails.env.production?