目的
Railsでbundle exec rails s
でのログとruby foo.rb
のログを別出力する
試した環境
OS : CentOS 6.8 (Final)
ruby : ruby 2.3.1p11
rails : 5.0.0
前提
- rubyがインストールされている
- rails アプリが既にある
-
${app}/console/
以下にバッチ処理のスクリプトがある
手順
batch用のenvironmentsを作成
$ cp ${app}/config/environments/production.rb ${app}/config/environments/batch.rb
batch環境で利用するDBを設定
$ vim ${app}/config/database.yml
batch:
<<: *default
database: db/prodcution.sqlite3
mysql, postgresql等の場合はbatch:
以下はproductionと同じように設定してください
${app}/console/foo.rb
の最初に以下を記述
ENV['RAILS_ENV'] = 'batch'
require File.join("~", "sample_app","config", "environment.rb")
logger = Rails.logger
logger.info("=== batch log ===")
(省略)
(*)sample_appは適宜自分のアプリの名前に変更してください
確認
$ ruby ${app}/console/foo.rb
上記を行って'log/batch.log'に=== batch log ===
が出力されているかを確認
補足
model内の関数で定義したlogger.info("model log")
もbatchから呼び出したときとサーバで呼び出されたときで別出力される