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