簡體   English   中英

Rails :: Railtie:無法創建Rails 3 gem

[英]Rails::Railtie: Trouble creating a Rails 3 gem

我真的可以用另一套眼睛,所以我想我會把它貼在這里。 不久之前,我為自己的教育目的寫了一個基本的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

看起來你已經解決了這個問題,但請記住,使用Rails 3,你可以做到:

ActiveSupport.on_load :active_record do
  ActiveRecord::ConnectionAdapters::MysqlAdapter.include SqlExplain::AR
end

這將確保只有在加載ActiveRecord后才會觸發您的include。

你確定這是真的嗎?:

if defined?(ActiveRecord)

我想這是假的。 而不是“rails”嘗試要求“rails / all” - 第一個不加載AR。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM