Chr*_*ker 10 mysql stored-procedures ruby-on-rails software-design ruby-on-rails-3
我熟悉Ruby on Rails,DB(MS)驱动程序和存储过程之间长期以来爱恨交织的关系,我从版本2.3.2开始就开发了Rails应用程序.
然而,每隔一段时间出现一种情况,其中SP只是比(更慢)应用程序级别上的数据组合更好的选择.具体而言,运行组合来自多个表的数据的报告通常更适合SP.
为什么存储过程仍然很难集成到Rails或MySQL 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
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这是一个非常难以解决的问题,还是Rails的设计选择?
Wol*_*ang 10
rails中支持存储过程.您获得的不同步错误是因为MULTI_STATEMENTSRails中默认情况下未启用MySQL 的标志.此标志允许过程返回多于1个结果集.
请参阅此处获取有关如何启用它的代码示例:https://gist.github.com/wok/1367987
存储过程与MS SQL Server一起开箱即用.
我几乎在所有基于mySQL和SQL Server的rails项目中都使用了存储过程而没有任何发布.