Rails の seeds.rb
で task を実行したいとのことで、 やり方を調べました。
環境
- Ruby 2.2.2p95
- Rails 4.1.8
- Rake 10.4.2
rails g task sample shot
とコマンドを実行して、タスクを作っておきます。 下のように。
1 2 3 4 5 6 |
namespace :sample do desc "shot sample" task shot: :environment do # something what to do end end |
タスク自体は bundle exec rake sample:shot
で実行できます。 これを更に bundle exec rake db:seed
とやったときにも実行されるようにするのが今回のゴールです。 おそらく、 rails のコード内から task を実行するのも似たような感じでいけると思います。
解決策
seeds.rb
に下の記述を追加します。
1 2 |
ENV['SOMETHING'] = 'value' Rake::Task['sample:shot'].invoke |
環境 (test, development, production) は、 rake db:seed
で設定されたものが引き継がれます。 上では SOMETHING
に 'value'
という値を設定しています。 rake db:fixture:load FIXTURES=xxxx
で設定するようなやつです。