La única forma de evitarlo es anulando la función configure_connection en ActiveRecord. Para hacer esto, recomendaría hacer una función ApplicationController llamada skip_sql? para probar si desea omitir la función configure_connection para algunas combinaciones acción del controlador #:
class ApplicationController
def skip_sql?
params[:controller] == "..." && params[:action] == "..."
end
end
A continuación, realice esta función a disposición de sus clases y modelos:
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}
A continuación, vaya sql sólo el mando # combinaciones de acciones se han establecido:
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
Si el configure_connection no funciona me gustaría probar el método connect así:
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
Creo que el método de conexión se llama antes del método de conexión de configuración, por lo que debería ayudar con el problema del socket.
Wow, gracias. Lo intenté, pero recibí un error de conexión 'No se puede conectar al servidor MySQL local a través del socket..' cuando apago el servidor de la base de datos y realizo esa solicitud. Cuando el servidor db está activado, ahora obtengo 'skip_logging' donde' SQL' estaba previamente en la salida que di más arriba. Seguiré jugando con eso, a menos que pienses que estoy haciendo algo mal. ¡gracias de nuevo! – sa125
Oye, dale una oportunidad al método connect. Agregué el código para eso también. Asegúrese de que esté en sus config/initializers o autoload_once_path, ya que no querrá seguir cargando este código en desarrollo. –
Desearía poder votar su respuesta por segunda vez. Estoy bastante seguro de que esto podría ser un buen complemento. – Jean