&tag(Rails/バッチ処理);
*目次 [#p4b04cd2]
#contents
*関連ページ [#k5d005dc]
-[[Rails]]

*参考情報 [#b4238e61]

*基本 [#d2990786]
-lib/tasksの下にファイルを作成し、バッチ処理的な事を行わせる。
-rails runnerで実行する。

*作成 [#p7ca8fc4]
-config/application.rbを編集し、autoload_pathsを設定しておく
 config.autoload_paths += %W(#{config.root}/lib)  # 追加
-lib/tasks/hello_task.rbを作成する
#pre{{
class Tasks::HelloTask
  def self.execute
    print "Hello World!! env=#{Rails.env}\n"
  end
end
}}
-実行する
 bundle exec rails runner "Tasks::HelloTask.execute"

*パラメータを渡したい [#na9d04b7]
**方法1: パラメータを直接渡す [#dee93375]
-呼び出し側のシェルスクリプト。hello.shとして保存。引数をクォートして渡す(a b c => 'a', 'b', 'c')
#pre{{
#!/bin/sh
str=""
for var in $*
do
    if [ "$str" = "" ]; then
        str="'${var}'"
    else
        str="${str}, '${var}'"
    fi
done
bundle exec rails runner "Tasks::HelloTask.execute($str)"
}}
-タスク
#pre{{
class Tasks::HelloTask
  def self.execute(*params)
    print "Hello World!! env=#{Rails.env}\n"
    p params
  end
end
}}
-実行
#pre{{
$ ./hello.sh a b c
Hello World!! env=development
["a", "b", "c"]
}}

**方法2: runnerでスクリプトを呼び出す [#s7819bd9]
-runnerにはRubyのコードを文字列として渡せるほかスクリプトを渡すこともできる。
-[[rails runnerで起動するスクリプトにオプションを渡す - Qiita:http://qiita.com/yoppi/items/c6dbc0326b1aa2902ef0]]
-呼び出し側のシェルスクリプト hello_parameter.shとして保存。
#pre{{
#!/bin/sh

bundle exec rails runner lib/tasks/hello_task.rb a b c

}}
-タスク
#pre{{
class Tasks::HelloTask
  def self.execute(*params)
    print "Hello World!! env=#{Rails.env}\n"
    p params
  end
end

if $0 == __FILE__
  Tasks::HelloTask.execute(*ARGV)
end

}}
-実行
#pre{{
./hello_parameter.sh
Hello World!! env=development
["a", "b", "c"]
}}




トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS