It’s no secret that I’m a massive fan of the Coldfusion on Wheels framework.. and there are a couple of tools that I use in my deployment process that are invaluable to me.
One of those is the DBMigrate plugin. I recently came up with a way to automatically migrate to the latest database version when the application first starts.
This can be useful/essential when:
- Your deployment process doesn’t use post-deploy hooks
- You want to make your application more portable
- You want to simplify your deployment script
Essentially, it calls a couple of the plugin’s methods whilst doing a little array-fu.
/events/onapplicationstart.cfm
<cfscript> // migrate database _dbm = {} // create a pointer to the dbmigrate plugin _dbm.plugin = application.wheels.plugins.dbmigrate // create an array of available migrations sorted by version in descending order _dbm.available = [] for(item in _dbm.plugin.getAvailableMigrations()){ _dbm.available.Append(item.version) } ArraySort(_dbm.available, "numeric", "desc") // migrate to the most recent version _dbm.plugin.migrateTo(_dbm.available[1]) </cfscript>
There are a few caveats:
- It will execute every time the application loads OR is manually reloaded via the reload=true parameter (though it’s fairy lightweight when there are no migrations to execute)
- It will execute on every server in your cluster
- There is (currently) no error handling
- It could disable your application if your migrations fail
oooh, nifty. I need this. Does DBMigrate work on 1.3.1 yet do we know?
As of writing this, the message in the CFWheels app info box says it’s not compatible, but I’ve been giving it a workout in my 1.3.1 production environment for a while with great success!
Pingback: Some helpers for CFWheels DBMigrate Plugin | Chapmandu, Adam's digital cesspool