質問: > > 必要な情報のみを抽出するところ > > > こういうハッシュをログとして出力しているので、それを取得してPostモデルに保存するということをしたいです。 {post_id: 1, name: “hoge”, category_id: 1} リアルタイムにDBに保存するのではなく、 バッチ処理として、まとめてDBに保存するといったことをやりたいです。
回答: もし私なら、タスクに書いて `cron` で回すと思います。 参考サイトのとおりに、`development_special.log` に出力されているとして、こんな感じでしょうか。 ``` namespace :batch do task log_to_db: :environment do open(Rails.root.join("log/development_special.log")) do |file| Post.transaction do file.readlines.map do |line| Post.create(JSON.parse(line)) end end end end end ``` 毎朝5時にバッチを回すなら、こんな感じ。 ``` 0 5 * * * /bin/bash -l -c 'cd /your_rails_path && RAILS_ENV=hoge bundle exec rake batch:log_to_db' ``` ところがこれをそのままやると、期待通りには動かないはずです。 1日ごとのローテーションなら、開くログの名前が変わりますし、 ログローテーションしないなら、前回までに登録したものを無視する必要があります。 それらも考慮に入れるには、情報が足りません。 こうゆうことができるのだ、というイメージだけでも伝われば、と思います。 > > 1) そもそもそういったことがかのうでしょうか? > > 2) 可能な場合、どのようにログ・ファイルから必要な情報を抽出できるのでしょうか? > > > 可能です。 タスクや、`rails script`は、rails の世界にアクセスできるので、その中でファイルを開いて、DBに格納できます。 より詳しく知りたいのであれば、take88 さんの質問に回答してみてください。 これは、非常に優れた質問です。 > > バッチ処理はどういうタイミングで動くのでしょうか。あとOS環境は何ですか? > > > こちらに回答すると、より適切な回答が得られると思います。