Diferente engine de mysql dependiendo del environment

13 views
Skip to first unread message

Xurde Fernandez Zapico

unread,
Sep 7, 2012, 7:27:33 AM9/7/12
to astur...@googlegroups.com
Buenas!
Alguna vez habéis necesitado usar diferentes engines de mysql según el environment? Por ejemplo usar innodb en desarrollo y ndb en producción?
Googleando un poco no veo una manera fácil de hacerlo más allá de especificar en cada creación de tabla las options con Rails.env.production? ? "engine=ndb" : nil pero esto me parece excesivamente sujeto a olvidos y por lo tanto a pifias.. Por no hablar de hacer un schema:load o similar.

Un saludo

Victor Martinez

unread,
Sep 7, 2012, 10:03:45 AM9/7/12
to astur...@googlegroups.com
Hola!

Lo que puedes hacer es definir el engine en una variable de configuración en config/environments/{production,development,test}.rb

  config.db_engine = "MyEngine"


Y luego crearte un initializer que sobrescriba el metodo create_table

 module ActiveRecord
  module ConnectionAdapters
    class Mysql2Adapter
      def create_table(table_name, options = {})
        #puts "my create_table!!"
        super(table_name, options.merge(:options => "ENGINE=#{Rails.configuration.db_engine}"))
      end
    end
  end
 end


Acabo de probarlo rapido y parece que funciona.

--

Víctor Martínez
@vicmargar

Xurde Fernandez Zapico

unread,
Sep 7, 2012, 10:13:07 AM9/7/12
to astur...@googlegroups.com

Tiene buena pinta. Había pensado en el,patch pero no en la variable d config.
Gracias!

Reply all
Reply to author
Forward
0 new messages