2011-07-28 9 views
1

開発中にコントローラのアクションが爆発すると、通常は有用な情報を含むバックトレースが取得されます。プロダクションで同じことが起こると、電子メールで取得し、訪問者に404を表示します。いずれにしても、インスタンスとその変数を検査する何らかのエラー処理があります。RAMを破棄するArelクエリーを回避する方法

不完全なArelクエリが検査されると、多くのオブジェクトが読み込まれます。次に例を示します。

def index 
    @users = User.order("name asc") 
    if params[:query] 
    @users = @users.where("username like ?", "%{params[:query]}%") 
    else 
    @users = @users.limit(20) 
    end 
end 

すると、条件が吹くまで、@users変数はUser.order("name asc")で立ち往生して検査する場合、それはRAMを埋めるデータベースからすべてのユーザーをアップロード内側何か。

これを回避する方法はありますか?

+0

は、パッチを作成して、要求を引っ張っ:https://github.com/rails/rails/pull/ 2623 – Kostas

答えて

0

@usersを事前設定済みのLIMITオーバーライドで予備初期化してから後でキャンセルするのはどうですか?最後に

def index 
    @users = User.order("name asc").limit(1) 
    if params[:query] 
    @users = @users.where("username like ?", "%{params[:query]}%").limit(nil) 
    else 
    @users = @users.limit(20) 
    end 
end 
+0

私はもっとシステム全体に何かを望んでいました。 – Kostas

+0

あなたのシステムはあなたの手をそっと保持することができます。もしあなたが失敗し、それらのすべてのレコードをロードする偽のクエリを書いたら、誰が意図的ではないと言っていますか?あなたは、RailsかMySQL(あるいはあなたのDBが何であれ)を言っていますか? "WHERE句のないクエリを実行できないのですか?"それは少しひどいようです。だから、もしあなたが*あなたにしたいなら、あなたはそれを乗り越えなければならないだろうか? –

+0

いいえ、いいえ。私は、例外報告システムは、アプリケーションとデータベースシステムを停止させないほどスマートにすべきだと言っているだけです。 – Kostas

関連する問題