= sfPropelSyncContentPlugin = Symfony makes it easy to sync code between your development, staging and production servers. But what about content? Deploying content to other servers typically does not happen on the same schedule as the deployment of code. And Symfony's rsync support doesn't address the issue of copying databases. So if you're like me, you're sick and tired of copying database dumps around during the early stages of deploying a site. sfPropelSyncContentPlugin to the rescue! == Requirements == Your project must use Propel. This is simply because the code currently assumes the Propel entry in database.yml is the one you want, and I haven't done any work to parse and properly handle settings for other databases. It wouldn't be hard to patch this to make the plugin more universal. Your project must use MySQL. This is because the code relies heavily on the mysqldump and mysql commands. This would be harder to patch unless your preferred database offers equivalent commands. Your hosts must have the mysqldump and mysql commands in the PATH. Both the source and the destination should be running some flavor of Unix (MacOS X should be fine, but watch out for mysql and mysqldump not being in the command line path, you may have to fix that; Linux, of course, works great). == Instructions == With this plugin installed, you can synchronize your local database with the remote database on the staging server with the following command: symfony propel-sync-content frontend dev from staging This downloads the database from the staging server and writes its contents TO the database associated with the local Symfony project. We accept no responsibility for the consequences of failing to understand the words "FROM" and "TO." You can also move your data in the opposite direction: symfony propel-sync-content frontend dev to staging This copies the database from the local project TO the staging site. You can also copy to and from production servers- if it's listed in config/properties.ini, you can sync content with it: symfony propel-sync-content frontend dev to production You can also specify files and directories to be copied over via rsync at the same time. Here's a snippet of our apps/frontend/config/app.yml: all: sfPropelSyncContentPlugin: # The database is content, of course, but what else? content: # Almost always - "web/uploads" # If you use sfLucene - "data/index" == About Those Pesky Password Prompts == This task will ask for your ssh password... a lot. That's not a bug. However, you can make it go away by following (and understanding) this HOWTO: http://www.linuxproblem.org/art_9.html Obviously this is a security risk in the event the laptop you are syncing from should be stolen. You must IMMEDIATELY remove the entry for your machine from authorized_keys on the remote server in that situation. == Acknowledgements == This plugin borrows a few nifty functions from sfLucenePlugin, the license of which is included in our LICENSE file. == Annoyances == "Why do I have to specify an application?" Yes, it seems strange but it seems you can't initialize the Symfony environment without one, at least in 1.0. Since we want access to classes like sfConfig, we need that. So pass frontend or whatever your main application is. "Why do I have to specify an environment?" This one is a feature: different sections of app.yml can come into play depending on the environment. "Why doesn't it work in 1.1 or 1.2?" I have no idea whether it works in 1.1 or 1.2. Try it. Send me patches that don't break 1.0 (unless a branch is truly necessary due to major architectural changes). == Additional Disclaimer == This is a power tool, for grownups only. We accept NO responsibility for the consequences of using this tool. If you are not backing up your databases, and you fail to understand the meaning of "from" or "to," don't come crying to us. Seriously. That said: it's very useful. Enjoy. (: == Credits == Tom Boutell, tom@punkave.com P'unk Avenue LLC, www.punkave.com Released under the MIT license. See the LICENSE file for details.