Archive for category Ruby

redMineでInternalError

Apache再起動で誤魔化していたのですが、さすがにそろそろ対応してくださいと言われ。

常に出てる訳ではなく、しばらく使っているとなぜか突然「InternalError」になって
一旦出てしまうと何をやっても駄目

internalerror.jpg

String#chars というのが問題を起こしている模様

Railsには手をいれないで解決する方法が既にありました。こちら

config/initializers/remove_string_chars.rb

を以下の内容で作成するとエラーが回避できました。

unless '1.9'.respond_to?(:force_encoding)
 String.class_eval do
   begin
     remove_method :chars
   rescue NameError
     # OK
   end
 end
end

データのクリーンアップメソッド

メンバー登録で仮登録状態のまま放置されたデータなんかを削除するには
メンバーモデルにクリーンアップのためのメソッドを追加します。

クリーンアップメソッド
ステータスコード(status)がfalseで、24時間以上経過したデータを削除する。

def self.cleanup
  Member.destroy_all(["status = ? AND created_at < ?", false, 24.hours.ago])
end

このクリーンアップメソッドをWebアプリ以外から実行するには script/runner を使います。
※環境変数など既存プロジェクトと同じものを使うことができるので便利

$HOME/script/runner 'Member.cleanup'

開発環境(development)は問題ないけど、本番環境(production)として動かしたい場合はどうするんだろう?

RAILS_ENV=production $HOME/script/runner 'Member.cleanup'

まぁ、ほんとはシェルスクリプトとかにするのがいいと思うんだけど、余裕がなかったのでここまで

これで不要データのクリーンアップ完了!
CRONなどに登録して定期的に実行しておくのがオススメですね。