Я мог бы использовать еще один набор глаз, поэтому я подумал, что отправлю его здесь. Некоторое время назад я написал базовое расширение ActiveRecord для своих собственных образовательных целей. В последнее время я читал о железных дорогах и думал, что попытаюсь заставить его работать с Rails 3. Я думал, что упакую его как драгоценный камень, чтобы понять этот процесс. Если я пропущу Railtie и просто сделаю это как традиционный monkeypatch в папке инициализаций, он отлично работает. Использование Railtie ... ничего.Rails :: Railtie: проблема с созданием Rails 3 gem
Из-за внешнего вида мой 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
Я никогда не мог получить способ инициализации, чтобы стрелять в мою railtie. Какие-нибудь советы по этому поводу? – mikewilliamson
Ничто не выскакивает на меня как ошибочное. Вы уверены, что сам Рейли загружается? – PreciousBodilyFluids
Рейтинги есть. ActiveSupport.onload внутри railtie работает без проблем. Все, что внутри блока инициализатора никогда не срабатывает. Документы показывают, что это просто вызвано автоматически ... – mikewilliamson