Tag: Rails/バッチ処理

目次

関連ページ

参考情報

基本

  • lib/tasksの下にファイルを作成し、バッチ処理的な事を行わせる。
  • rails runnerで実行する。

作成

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

パラメータを渡したい

方法1: パラメータを直接渡す

  • 呼び出し側のシェルスクリプト。hello.shとして保存。引数をクォートして渡す(a b c => 'a', 'b', 'c')
    #!/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)"
    
  • タスク
    class Tasks::HelloTask
      def self.execute(*params)
        print "Hello World!! env=#{Rails.env}\n"
        p params
      end
    end
    
  • 実行
    $ ./hello.sh a b c
    Hello World!! env=development
    ["a", "b", "c"]
    

方法2: runnerでスクリプトを呼び出す

  • runnerにはRubyのコードを文字列として渡せるほかスクリプトを渡すこともできる。
  • rails runnerで起動するスクリプトにオプションを渡す - Qiita
  • 呼び出し側のシェルスクリプト hello_parameter.shとして保存。
    #!/bin/sh
    
    bundle exec rails runner lib/tasks/hello_task.rb a b c
    
    
  • タスク
    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
    
    
  • 実行
    ./hello_parameter.sh
    Hello World!! env=development
    ["a", "b", "c"]
    

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-13 (水) 16:47:32