まず、Puma(でもMRI)のRails 3.2を使用していますが、明示的にスレッドを実行していません。ActiveRecordは接続を閉じるためにSQLを実行する必要がありますか? DEPRECATION警告:データベース接続は自動的に閉じられません
MyModel.connection.execute
のようなexecute
メソッドを使用している場所にいるのですが、ActiveRecord::Base.connection.execute
はすべての接続が同じDBを使用しているので同じことをすることができます。私は最近、
DEPRECATION WARNING: Database connections will not be closed automatically, please close your database connection at the end of the thread by calling `close` on your connection. For example ActiveRecord::Base.connection.close
を見始め
これは自明と思われるが、私はほとんどシナトラ(EX ActiveRecord connection warning. (Database connections will not be closed automatically))とのActiveRecordを使用する方法については、オンラインそれにはほとんど情報を見つけることができます。
私はこれを読んで:
http://blog.daniel-azuma.com/archives/216
をラックミドルウェアは限りDBは(私が正しく理解していれば)トランザクションは、コントローラで行われている実行すると私のためにそれをしないことを示唆しています。これは、他の場所で行われているトランザクション(モデルやデコレータなど)は、明示的に閉じなければならないということですか?それは、コントローラ、元から呼び出されたそれをしないモデル法だ場合でも:
class MyController
def show
MyModel.do_execute_sql_stuff
end
end
class MyModel
def self.do_execute_sql_stuff
connection.execute("WHATEVER;")
end
end
私はここで明示的にクローズする必要がありますか?もしそうなら、私はMyModel.connection.close
またはMyModel.clear_active_connections!
を記事として示唆しますか?英語は私の母国語ではないかもしれないが、その方法は危険に思えるかもしれない!そしてどうやってそれをやるの?
conn = MyModel.connection
result = conn.execute("STUFF")
do_stuff_with(result)
conn.close |or| MyModel.clear_active_connections!
そうですか?
find_by_sql
を使用するとどうなりますか?それはプールへの接続を返しますか、それとも明示的に行う必要がありますか?
EDIT:奇妙なことに、これは私のプロダクションログにのみ表示されます。開発中でもステージングでもない(生産と同一でなければならない)
どの場合ですか?モデルからやっているとき?デコレータ?ヘルパー?しかし、これはスクリプトではありませんが、これは継続的に実行されています... –
モデル内でメソッドを作成し、実行コードの最後に接続を終了する場所で呼び出すことができます。そのメソッドは上記のコードを持っているので、呼び出されるといつでも接続を閉じることができます。 – Mehul
私は何を求めているのですか?私はこれを行う必要がありますか?モデルから質問するときですか?デコレータから?ヘルパーから?あなたは「あなたの実行コードの終わりに呼んでください」と言います - 実行コードはそれですか? –