我真的可以用另一套眼睛,所以我想我会把它贴在这里.
不久之前,我为自己的教育目的写了一个基本的ActiveRecord扩展.我最近一直在阅读有关Railties的文章,并且我认为我会尝试使用Rails 3.我想我会把它打包成一块宝石来了解这个过程.
如果我跳过Railtie并在初始化文件夹中将其作为传统的monkeypatch执行,它可以正常工作.使用铁路……没什么.
不久之前,我为自己的教育目的写了一个基本的ActiveRecord扩展.我最近一直在阅读有关Railties的文章,并且我认为我会尝试使用Rails 3.我想我会把它打包成一块宝石来了解这个过程.
如果我跳过Railtie并在初始化文件夹中将其作为传统的monkeypatch执行,它可以正常工作.使用铁路……没什么.
从它的外观来看,我的Railtie永远不会被执行,因此似乎没有其他任何事情发生.
这里有人看错吗?
我们也欢迎任何有关最佳实践或改进的建议.
项目Gemfile:
gem 'sql_explain',:path => "/home/mike/projects/sql_explain/"
gemspec:
... spec.files = %w(README.rdoc sql_explain.rb lib/sql_explain.rb lib/railtie.rb sql_explain.gemspec) ...
sql_explain.rb
require 'lib/railtie.rb'
railtie.rb
require 'active_record' require 'sql_explain' module sqlExplain class Railtie < Rails::Railtie railtie_name :sql_explain initializer 'sql_explain.extend.activerecord' do if defined?(ActiveRecord) ActiveRecord::ConnectionAdapters::MysqLAdapter.include sqlExplain::AR end end end end
sql_explain.rb
module sqlExplain module AR def self.included(base_klass) base_klass.send :alias_method_chain,:select,:explain end def select_with_explain(sql,name = nil) @connection.query_with_result = true result = execute('explain ' + sql,:skip_logging) rows = [] result.each_hash { |row| rows << row } result.free @connection.more_results && @connection.next_result # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped exp_string = "" rows.each{|row| row.each_pair{|k,v| exp_string += " #{k}: #{v} |"}} log(exp_string,"Explanation") {} select_without_explain(sql,name) end end end
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。