Archive for category RubyOnRails

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

DEPRECATION WARNING: end_form_tag

ログを確認していると、end_form_tag がどうとかって警告が出続けている。

DEPRECATION WARNING: end_form_tag is deprecated and will be removed from Rails 2.0 See http://www.rubyonrails.org/deprecation for details. …

どういうことか調べてみると、フォーラムに何か書いてある

It means you should replace this

どうやら end に置き換えなさいということらしいので言われたとおりに置き換える

end_form_tag ⇒ end

・・・エラーじゃん???

改めてエラーログを再度確認してみると「from Rails 2.0」って書いてるよ ( ̄~ ̄;)
最後までちゃんと読まないとダメですね。

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

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

クリーンアップメソッド
ステータスコード(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などに登録して定期的に実行しておくのがオススメですね。