Bunun üstesinden gelmenin tek yolu ActiveRecord'da configure_connection işlevini geçersiz kılmaktır. Bunu yapmak için skip_sql adında bir ApplicationController işlevi oluşturmanızı öneririm?
module SkipSql
module Controller
def self.included(base)
base.prepend_before_filter :assign_skip_sql_to_models
end
def assign_skip_sql_to_models
ActiveRecord::Base.skip_sql_proc = proc {send(:skip_sql?)}
end
end
module Model
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
attr_accessor :skip_sql_proc
def skip_sql?
ActiveRecord::Base.skip_sql_proc.call if ActiveRecord::Base.skip_sql_proc
end
end
def skip_sql?
self.class.skip_sql?
end
end
end
Object.send :include, SkipSql::Model::ClassMethods
ActionController::Base.class_eval {include SkipSql::Controller}
Sonra sadece denetleyici # üzerinde sql atlamak: Sonra sınıflar ve modellere uygun bu işlevi yapmak
class ApplicationController
def skip_sql?
params[:controller] == "..." && params[:action] == "..."
end
end
: Bazı denetleyici # eylem kombinasyonları için configure_connection fonksiyonunu atlamak istiyorsanız olmadığını test etmek için eylem kombinasyonları ayarladığınız:
class ActiveRecord::ConnectionAdapters::MysqlAdapter
def configure_connection
unless skip_sql?
encoding = @config[:encoding]
execute("SET NAMES '#{encoding}'", :skip_logging) if encoding
execute("SET SQL_AUTO_IS_NULL=0", :skip_logging)
end
end
end
configure_connection biri böyle bir yöntem bağlayın.Bir çalışacaktı işe yaramazsa:
class ActiveRecord::ConnectionAdapters::MysqlAdapter
alias :old_connect :connect
def connect
old_connect unless skip_sql?
end
alias :old_active? :active?
def active?
skip_sql? ? false : old_active?
end
end
Bağlantı yöntemi yapılandırma bağlantı yönteminden önce çağrıldığına inanıyorum, bu nedenle soket sorununa yardımcı olmalıdır.
Vay, teşekkürler. Bunu denedim, ancak veritabanı sunucusunu kapatıp bu isteği yaptıktan sonra lokal MySQL sunucusuna soket üzerinden bağlanamıyorum bir bağlantı hatası alıyorum. Db sunucusu açık olduğunda, şimdi 'skip_logging'' '' '' '' '' '' '' '' 'yukarıda verilen çıktı çıktı. Yanlış bir şey yaptığımı düşünmediğin sürece onunla oynamaya devam edeceğim. Tekrar teşekkürler! – sa125
Hey, bağlantı yöntemini de bir şans verin. Bunun için de kodu ekledim. Bu kodu geliştirmeye yeniden yüklemeyi istemediğinizden, bunun yapılandırma/başlatıcılarınızda veya bir autoload_once_path olduğundan emin olun. –
Keşke ikinci kez cevap verebilseydim. Eminim ki bu hoş bir eklenti yapabilir. – Jean