0.01
No commit activity in last 3 years
No release in over 3 years
Extended rails tasks db:structure:dump/load methods that supports mysql views/triggers/routines
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies
 Project Readme

DbStructureExt

ActiveRecord connection adapter extensions.

Currently it extends only mysql/mysql2 adapter with structure_dump/structure_load methods.

Library does not override mysql adapter by default.

So you can use extensions independently (via MysqlConnectionProxy) or include extension methods into adapter.

Goals

  • dump/load full mysql structure (with tables/views/triggers/routines)
  • dump/load mysql structure from any database/file to any file/database
  • parallel_tests support in mysql structures

Installation

gem install db_structure_ext

Using MysqlConnectionProxy

connection = ActiveRecord::Base.connection
connection_proxy = DbStructureExt::MysqlConnectionProxy.new(connection)
connection_proxy.structure_dump

Extending mysql adapter

require 'db_structure_ext/init_mysql_adapter'
connection.structure_dump

It automaticaly detects corresponding mysql/mysq2 adapter. So it should works with any rails version including v1.2.6

Dump structure

Extended structure_dump for mysql/mysql2 adapter dumps not only tables. It dumps:

  • tables
  • views
  • triggers
  • routines (functions and procedures)

Load structure

Method loads sql statements separated by \n\n

parallel tests support

It supports parallel_tests or another gems that use TEST_ENV_NUMBER variable for tests parallelization.

It prepends

ENV['TEST_ENV_NUMBER']

to any table name with _test suffix in name

Rails db tasks extensions

Add to your Rakefile

require 'db_structure_ext/tasks'

In case Rails3 it loads tasks automaticaly via railtie mechanizm.

db:structure:dump

Synopsis:

rake db:structure:dump[env,file]  # Dump the database structure to a SQL file

By default it works as original well-known rails task. It dumps development structure to db/development_structure.sql But it dumps to NOT only TABLES. It dumps also VIEWS, TRIGGERS and ROUTINES.

Additionally you can indicate another environment as first argument and optionally another dump file as second. By default dump filename is db/{env}_structure.sql

db:structure:load

Synopsis:

rake db:structure:load[env,file]  # Load SQL structure file to the database

It's opposite task to db:structure:load that allows to load db structure from specified file to specified db environment. The arguments is the same as for previous task.

Examples

Dump development structure to db/development_structure.sql file:

rake db:structure:dump[development,db/development_structure.sql]
# or
rake db:structure:dump[development]
# or
RAILS_ENV=development db:structure:dump
# or just
rake db:structure:dump

Dump development structure to db/my_structure.sql file:

rake db:structure:dump[development,db/my_structure.sql]

Load db/my_structure.sql to test database:

rake db:structure:load[test,db/my_structure.sql]

Load db/development_structure.sql to development database:

rake db:structure:load[development,db/development_structure.sql]
# or
rake db:structure:load[development]
# or
RAILS_ENV=development rake db:structure:load[development]
# or
rake db:structure:load

Testing

We have tested library against AR 1.x.x and AR 3.0.x.

We use multiversion gem

It assumes you use RVM and Bundler.

Create rvm aliases

rvm alias create ar01_r186 ruby-1.8.6-pYOUR_PATCH_LEVEL
rvm alias create ar30_r192 ruby-1.9.2-pYOUR_PATCH_LEVEL

Install multiversion

gem install multiversion

Install gems

multiversion all bundle install

Run tests

multiversion all rspec spec

License