Hi!

I'm working in a project where we are releasing new versions of our webapp
regularly and often. In every release there may or may not be changes to the
database. As far as I know there is no really smooth way of doing a release
like this. I need to create an sql-file that contains the changes of the
database and it needs to be correct in every way.

Or I could extract the entire production database, make the changes in the
extracted file, then drop the production database and insert it again with
the new file. 

Besides this I need to deploy the webapp. No solution is great but I have a
proposal for solving this.

 

The premises are these:

.         You have a live running webapp at a public sever which people are
using. 

.         The public app has its database structure that may or may not
change between releases.

.         The public app has data in the database that you wish to keep
between releases (unless a certain table or column in a table were to be
removed. This would of course also remove the data of that table/column).
This is data like user accounts, products or whatever your database consists
of.

 

.         In your development environment you have a schema-xml file
describing your database.

.         You have some data that is essential to your database, such as
permissions etc.

.         You have some data that is not essential but used for e.g.
functional testing, such as mock users, mock products etc.

 

.         When you release a new version you want to merge the structure in
your development environment with the existing one in your production
environment (add/remove tables/columns/constraints).

.         You also want to add new essential data.

 

My proposal is to create a new torque task called migrate that solves this
(if possible).

The execution would work like this:

                             

1.       Validate the development version of schema-xml.

2.       Extract the database structure from the production environment.

3.       Compare it to the schema-xml from development.

4.       Create an sql file (or equivalent) from the comparison, only
containing statements like create/alter/drop table/constraint for the tables
that need changing.

5.       Execute the created file.

6.       Insert essential data from the data.xml

 

This feature would make it possible to release a new version of the webapp,
containing database changes, with one single maven command and I would like
some feedback on the idea. If this is an interesting feature, me and my team
are willing to put a lot of effort into developing it, but we would also
appreciate help from experienced torque developers on how basic torque
functions work since we are not that familiar with the torque code.

 

Open for feedback

/Ludwig

Reply via email to