İlk olarak, Puma (ancak MRI ile) Rails 3.2 kullanıyorum ve elle açık bir iş parçacığı yapıyorum.ActiveRecord SQL bağlantısını yürütmek için gerekli yürütmeyi yürütüyor mu? DEPRECATION UYARI: Veritabanı bağlantıları otomatik olarak kapatılmayacaktır
MyModel.connection.execute
gibi execute
yöntemini kullanarak yerlerdeyim veya ActiveRecord::Base.connection.execute
aynı şeyi yapabilirim çünkü tüm bağlantılar şu anda benim için aynı DB'ye sahipler. Çoğunlukla Sinatra (ex ActiveRecord connection warning. (Database connections will not be closed automatically)) ile ActiveRecord kullanma hakkında
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
Bu kendini açıklayıcı görünüyor görmeye başladım, ama çevrimiçi üzerine çok az bilgi bulabilirsiniz.
Okuduğum bu: Raf katman sürece DB (eğer doğru anlamak) işlem bir denetleyici yapılır yürütmek olarak benim için yapar düşündürmektedirhttp://blog.daniel-azuma.com/archives/216
. Bu, başka bir yerde yapılan işlemler (bir model veya dekoratör gibi - birçok yerde yararlıdır, bu yüzden onları tek bir denetleyiciye koymak istemiyorum) açık bir şekilde kapatılmalı mıdır? Bir kontrolör, eski karşı yapıyor bir modeli yöntemi denilen o kanalın hangi bile:
class MyController
def show
MyModel.do_execute_sql_stuff
end
end
class MyModel
def self.do_execute_sql_stuff
connection.execute("WHATEVER;")
end
end
Do Burada açıkça yakın gerekir? Eğer öyleyse, makalenin önerdiği gibi MyModel.connection.close
veya MyModel.clear_active_connections!
kullanmalı mıyım? Belki de İngilizce benim ilk dilim değil, ama bu yöntem tehlikeli geliyor! Ve ben nasıl yaparım?
conn = MyModel.connection
result = conn.execute("STUFF")
do_stuff_with(result)
conn.close |or| MyModel.clear_active_connections!
Böyle mi?
find_by_sql
kullanırken ne yapılmalıdır? Bağlantı havuza geri dönecek mi yoksa açıkça bunu yapmak zorunda mıyım?
DÜZENLEME: Tuhaf bir şekilde, sadece bunu üretim günlüklerimde görüyorum. Gelişimde değil, aşamada (üretim ile aynı olmalıdır).
Bu durumda? Modelden ne zaman yapılır? Dekoratör? Yardımcı? Bu bir kapalı komut dosyası değil, ancak, bu sürekli olarak çalışıyor ... –
Modelde bir yöntem yapabilir ve bağlantıyı kapatmak istediğiniz yerde yürütme kodunuzun sonunda çağırabilirsiniz. Bu yöntem kodun üzerinde olduğundan, çağrıldığında bağlantı kesilebilir. – Mehul
Sorduğum şey, _when_ bunu yapmak zorunda mıyım - modelden sorgularken? Bir dekoratörden mi? Bir yardımcıdan mı? "Yürütme kodunun sonunda çağır" deyin - hangi yürütme kodu bu? –