My WordPress Development Setup
One of the first things I did with my resuscitated blog was to figure out how I could develop for it in a reasonable fashion.
I’m pretty happy with the development environment at this point, the key features of which are:
Version Control: Subversion
Version control of some kind is simply necessary. If you really have to, you can do without something like Subversion, but there’s no real reason to—even if your host doesn’t give you shell access (in which case you should probably switch hosts), you can still use Subversion on your local machine, with your repository also running locally. That’s not an ideal situation, but it’s a lot better than no version control.
I strongly advise using the WordPress Subversion installation procedure, but with one alteration. You’re going to be keeping track of your changes in Subversion, and it’s not worth it to try to deal with svn externals for this. So instead of using svn checkout
, use svn export
, e.g.
svn export http://svn.automattic.com/wordpress/tags/2.7.1 .
(This also means that you should use svn export
instead of svn sw
when you’re upgrading.)
Separate Production and Development Code Trees
For small projects like this, a full suite of development, staging, and production isn’t necessary. But having both a production environment and a development environment is. These could be on separate machines, but in my case they’re on the same machine, as separate virtual hosts. Both code trees are local checkouts of the same project in Subversion. One useful trick for me was enabling error reporting on the development server:
php_value display_errors "1"
That line can be placed in either a .htaccess file or the VirtualHost section for the host. Here’s the list of php.ini directives, which tell you where they can be set/overridden.
Separate Production and Development Databases
You need to screw around with the WordPress database in various ways during development, and you don’t want that to alter your production site. Three simple steps will take care of this:
- Create a new database (named something like
yourwpdatabasename_development
). - Back up the production database:
mysqldump -u MySQLusername -p yourwpdatabasename > database_backup.sql
- Alter the backup file to change the hostname from your production hostname to your development hostname. The easiest way to automate this is probably to create a file called dev_setup.sql with these lines:
UPDATE wp_options SET option_value="http://development_wp_url" WHERE option_value = "http://production_wp_url";
and then use
cat
to append this to the backup file:cat database_backup.sql dev_setup.sql > development_load.sql
- Load the altered backup file into the development database:
mysql -u MySQLusername -p yourwp_development_databasename < development_load.sql
- Change the
wp-config.php
MySQL settings in the development tree:/** The name of the database for WordPress */ define('DB_NAME', 'yourwp_development_databasename'); /** MySQL database username */ define('DB_USER', 'yourwp_development_username'); /** MySQL database password */ define('DB_PASSWORD', 'yourwp_development_password');
(The last two settings might not need to be changed.)
One note here is that you should make sure not to check the
wp-config.php
file in to or out of your development tree.
Focus on Theme and Plugin Files
It should be possible to make more or less all the changes you want without altering anything but plugin and theme files. If you do change the core WordPress files, you'll have to be more careful with tracking updates, so unless your changes are extremely minor or you're planning on forking WordPress, stick to the plugin and theme directories. Further, new functionality should really go in plugins if possible. It requires some more work to develop, but it's far easier to maintain, and will make dealing with future moves or upgrades significantly easier.
So far, I've moved a 2.0 WordPress install over to 2.7, written a finished plugin and and unfinished plugin, installed several plugins, altered my theme, and installed an update (2.7 -> 2.7.1) using this environment, and it's all been quite smooth.
11 Mar 2009 at 14:18
So, would wordpress work for even noobs like me?
Also, how are you these days?