new - ruby on rails mysql configuration
¿Cómo puedo copiar una base de datos mySQL en ruby on rails? (4)
Desde cualquier controlador, puede definir el siguiente método.
def copy_template_database
template_name = "customerdb1" # Database to copy from
new_name = "temp" #database to create & copy to
#connect to template database to copy. Note that this will override any previous
#connections for all Models that inherit from ActiveRecord::Base
ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => template_name, :host => "olddev",
:username => "root", :password => "password" })
sql_connection = ActiveRecord::Base.connection
sql_connection.execute("CREATE DATABASE #{new_name} CHARACTER SET latin1 COLLATE latin1_general_ci")
tables = sql_connection.select_all("Show Tables")
#the results are an array of hashes, ie:
# [{"table_from_customerdb1" => "customers"},{"table_from_customerdb1" => "employees},...]
table_names = Array.new
tables.each { |hash| hash.each_value { |name| table_names << name }}
table_names.each { |name|
sql_connection.execute("CREATE TABLE #{new_name}.#{name} LIKE #{template_name}.#{name}")
sql_connection.execute("INSERT INTO #{new_name}.#{name} SELECT * FROM #{template_name}.#{name}")
}
#This statement is optional. It connects ActiveRecord to the new database
ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => new_name, :host => "olddev",
:username => "root", :password => "password" })
end
Tenga en cuenta que no sé con certeza si esto mantendrá la integridad de la clave antigua. Creo que depende mucho de cómo se crea la plantilla de la base de datos.
Estamos creando una aplicación web de Ruby On Rails en la que cada cliente obtiene su propia base de datos.
La base de datos debe crearse después de que completen un formulario en nuestro sitio web.
Tenemos una base de datos de plantillas que tiene todas las tablas y columnas que necesitamos copiar. ¿Cómo puedo hacer esto programáticamente desde ruby on rails?
Mediante el uso de yaml_db
Necesita instalar el plugin, volcar cualquier base de datos de rieles (incluyendo mysql) en el archivo data.yml usando la tarea de rake, cambiar la cadena de conexión para apuntar a nueva base de datos y finalmente cargar data.yml en cualquier base de datos nueva (incluyendo mysql) usando otra tarea rake . Muy sencillo.
No estoy seguro de lo que quiere decir, pero puede usar la funcionalidad de línea de comandos de ruby para volcar la base de datos de plantillas, crear una nueva base de datos y volver a importarla usando el programa mysqldump :
> mysqldump -uroot -proot templateDB > dump.sql
> mysql -uroot -proot --execute="CREATE DATABASE newDB"
> mysql -uroot -proot newDB < dump.sql
Aquí hay una buena descripción de invocar opciones de línea de comando de Ruby.
Puede poner su código de creación de esquema de plantilla en un script que contenga todas las instrucciones de creación de tabla / índice / vista / procedimiento requeridas, llámelo "template_schema.sql" o lo que sea y luego simplemente ejecute el script en la base de datos de su elección (desde Ruby, si eso es lo que buscas) y listo.
El mejor enfoque es, probablemente, tener cada objeto de base de datos en un archivo separado bajo control de origen (para facilitar el seguimiento de los cambios en objetos individuales) y luego fusionarlos en un único archivo como parte de la implementación.