Я знаком с давними отношениями между любовью и ненавистью между Ruby on Rails, DB (MS) -drivers и хранимыми процедурами, и я разрабатываю приложения Rails с версии 2.3.2.
Однако время от времени возникает ситуация, когда SP - просто лучший выбор, чем объединение данных на (гораздо медленнее) уровне приложения. В частности, запуск отчетов, который объединяет данные из нескольких таблиц, обычно лучше подходит для SP.
Почему хранящиеся процедуры все еще настолько плохо интегрированы в Rails или Gem. В настоящее время я работаю над проектом с Rails 3.0.10 и MySQL2 gem 0.2.13, но, насколько я вижу, даже самые последние Edge Rails и MySQL gem 0.3+ все еще бросают истерики при использовании SP.
Проблема, которая была и остается в том, что соединение с базой данных теряется после вызова 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
Это действительно сложная проблема для решения, технически, или это выбор дизайна Rails?