Estoy familiarizado con la larga relación de amor-odio entre Ruby on Rails, controladores DB (MS) y procedimientos almacenados, y he estado desarrollando aplicaciones Rails desde la versión 2.3.2.¿Por qué los procedimientos almacenados aún no son compatibles con Rails (3+)?
Sin embargo, de vez en cuando surge una situación donde un SP es simplemente una mejor opción que combinar datos en el nivel de aplicación (mucho más lento). Específicamente, la ejecución de informes que combina datos de múltiples tablas suele ser más adecuada para un SP.
¿Por qué los procedimientos almacenados están tan mal integrados en Rails o en la gema MySQL? Actualmente estoy trabajando en un proyecto con Rails 3.0.10 y MySQL2 gem 0.2.13, pero hasta donde puedo ver, incluso las últimas versiones de Edge Rails y MySQL gem 0.3+ todavía generan rabietas cuando usas SP.
El problema que ha sido, y sigue siendo, es que la conexión de la base de datos se pierde después de que se llama a un SP.
>> ActiveRecord::Base.connection.execute("CALL stored_proc")
=> #<Mysql::Result:0x103429c90>
>> ActiveRecord::Base.connection.execute("CALL stored_proc")
ActiveRecord::StatementInvalid: Mysql::Error: Commands out of sync;
[...]
>> ActiveRecord::Base.connection.active?
=> false
>> ActiveRecord::Base.connection.reconnect!
=> nil
>> ActiveRecord::Base.connection.execute("CALL proc01")
=> #<Mysql::Result:0x1034102e0>
>> ActiveRecord::Base.connection.active?
=> false
¿Este es un problema realmente difícil de abordar, técnicamente, o es una opción de diseño de Rails?
Fwiw: Desde feb 2006, entrevista DHH: "estoy totalmente desinteresado en las características de lujo como procedimientos almacenados , desencadenantes y similares "- http://dev.mysql.com/tech-resources/interviews/david-heinemeier-hansson-rails.html –
También [" Considero que los procedimientos almacenados y las restricciones son viles e imprudentes destructores de la coherencia "] (http://web.archive.org/web/20060418215514/http://www.loudthinking.com/arc/000516.html) ... – dbr
2006 ... Principios antiguos (sí, 6 años es antiguo en un mundo lik e Rails ') rara vez tienen sentido contra la evolución de la tecnología (640k es suficiente, ¿alguien?) Existe el dominio teórico y práctico. En teoría, estoy absolutamente de acuerdo con el paradigma de Rails, pero a veces la mejor base de datos normalizada ofrece el peor rendimiento en el mundo real. Cuando un SP puede recopilar los datos de mi informe en menos de 100 ms y hacer 'el camino de Rails' toma más de 2-3 segundos y se realizan varias consultas en una base de datos compartida, sé quién es el ganador claro. – ChrisDekker