Last active
December 17, 2015 22:49
-
-
Save shiraji/5684596 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/local/bin/ruby | |
######################################################################## | |
# | |
# Rubyのバッチ処理でよく使うであろう処理が書かれたクラス。 | |
# よく使うオプションをclass_optionに設定し、 | |
# このクラスを継承したクラスで利用できるようになっている。 | |
# | |
######################################################################## | |
require 'thor' | |
require 'logger' | |
class MyThor < Thor | |
# applicaton.ymlのパス。Example: ../../config/application | |
APPLICATION_YML = '__FILL_IN_APPLICATION_YML_PATH__' | |
############################################################################ | |
# | |
# Help option | |
# | |
############################################################################ | |
class_option :help, :type => :boolean, :aliases => '-h', :desc => 'Show Help' | |
############################################################################ | |
# | |
# Log option | |
# 以下の設定を受け付ける。これら以外の場合、Railsの設定を利用する。 | |
# FATAL, ERROR, WARN, INFO, DEBUG | |
# | |
############################################################################ | |
class_option :log_level, :type => :string, :aliases => '-l',:desc => 'Log settings: FATAL, ERROR, WARN, INFO, DEBUG is the possible values' | |
############################################################################ | |
# | |
# Logの出力先オプション | |
# 出力先のファイルパスを指定するとそこにログをはく。 | |
# log_levelの設定をしていない限り、このオプションは無視される。 | |
# 指定がない場合、Rails.loggerの設定を利用する。 | |
# | |
############################################################################ | |
class_option :log_file, :type => :string, :aliases => '-f', :desc => 'Log output settings. Inorder to use this setting, set log_level' | |
############################################################################ | |
# | |
# Railsの環境変数。Rails.envの値を上書きします。 | |
# production, development, testの値を許可しています。 | |
# それ以外の値だった場合、Railsの設定を利用する。 | |
# | |
############################################################################ | |
class_option :environment, :type => :string, :aliases => '-e', :default => 'test', :desc => 'Environment value. Overwrite Rails.env with this value.' | |
############################################################################ | |
# | |
# コマンドとして、認識したくないメソッド。 | |
# 共通のメソッドをここに書くようにする。 | |
# | |
############################################################################ | |
no_commands do | |
############################################################################ | |
# | |
# Thorのinvoke_commandを継承したメソッド | |
# メソッドが呼ばれる前に、パラメータを設定できるようにする。 | |
# | |
# ■注意点 | |
# Thorの更新をした場合、invoke_commandメソッドの呼ぶタイミングが変更される恐れあり。 | |
# Thorのバージョン更新には十分気をつけてください。 | |
# Thor.invoke_command | |
# Thor.dispath | |
# Thor.start | |
# などを参照してみてください。 | |
# | |
############################################################################ | |
def invoke_command(command, *args) | |
prepare | |
super | |
end | |
############################################################################ | |
# | |
# 共通のパラメータの設定をする | |
# | |
# ■注意点■ | |
# パラメータ追加時はこのメソッドに必ず追加すること。 | |
# NpThorを継承しているクラスはこのメソッド呼び、パラメータの設定をすること。 | |
# | |
############################################################################ | |
def prepare | |
load_application_yml | |
set_environment | |
set_log_file | |
set_log_level | |
load_rails_environment | |
end | |
############################################################################ | |
# | |
# application.ymlを読み込む。 | |
# | |
############################################################################ | |
def load_application_yml | |
require File.expand_path(APPLICATION_YML, __FILE__) | |
end | |
############################################################################ | |
# | |
# Ralsの環境変数を読み込む。 | |
# | |
############################################################################ | |
def load_rails_environment | |
Rails.application.require_environment! | |
end | |
############################################################################ | |
# | |
# Rails.envの値を設定する。 | |
# :environmentがnilだった場合、上書きをせずに、 | |
# Rails.envの値を利用する。 | |
# | |
############################################################################ | |
def set_environment | |
if options[:environment] != nil | |
Rails.env = options[:environment] | |
end | |
end | |
############################################################################ | |
# | |
# ログレベルを設定するメソッド | |
# このメソッドで定義された、Rails.loggerを利用して、バッチのログを出力する。 | |
# Rails.loggerがnullの場合、Initializerで設定したRails.loggerを利用し、この設定は無視する。 | |
# | |
# 理由として、Rails.application.require_environment!をしていないため、Rails.loggerがない。 | |
# Rails.application.require_environment!を先にやるとDatabase関連のログが吐き出されて個人的に気分が悪い。 | |
# | |
############################################################################ | |
def set_log_level | |
if options[:log_level] != nil && Rails.logger != nil | |
case options[:log_level].upcase | |
when 'FATAL' then | |
Rails.logger.level = Logger::FATAL | |
when 'ERROR' then | |
Rails.logger.level = Logger::ERROR | |
when 'WARN' then | |
Rails.logger.level = Logger::WARN | |
when 'DEBUG' then | |
Rails.logger.level = Logger::DEBUG | |
when 'INFO' then | |
Rails.logger.level = Logger::INFO | |
end | |
end | |
end | |
############################################################################ | |
# | |
# ログの出力先を設定するメソッド | |
# 入力値がSTDOUT, STDIN, STDERRだった場合、 | |
# Logger.new(STDOUT) | |
# Logger.new(STDIN) | |
# Logger.new(STDERR) | |
# を利用する。 | |
# 入力値が何もなかった場合、Initializerで設定したRails.loggerを利用する。 | |
# | |
############################################################################ | |
def set_log_file | |
if options[:log_file] != nil | |
case options[:log_file].upcase | |
when 'STDOUT' then | |
Rails.logger = Logger.new(STDOUT) | |
when 'STDIN' then | |
Rails.logger = Logger.new(STDIN) | |
when 'STDERR' then | |
Rails.logger = Logger.new(STDERR) | |
else | |
Rails.logger = Logger.new(options[:log_file]) | |
end | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment