How I Manage My Generic Drupal Dev Sites
On my machine, I have two local sites I use for developing and testing modules and patches: http://d6.local
and http://d7.local
. After manually wiping and re-creating these sites several times in between some tests, I realized I was doing it wrong and wrote bash scripts to do it for me.
Now, I have templates for each of these sites. Whenever I want to start with a fresh dev site with some basic modules installed (like Admin Menu, Admin Role, and Devel), I run a quick bash script that drops and re-creates the database, imports a SQL file, and replaces the entire webroot directory with the contents of a tarball. I did have to manually setup the site, create my admin user, and enable the modules when I first set all this up. Now, I can easily update that template when I need to - for example, when there's a new versions of the Drupal core released.
Here's my setup:
- The webroot for the each version of Drupal are in
~/Sites/
. I've got~/Sites/d6.local
and~/Sites/d7.local
, specifically. - My two bash scripts,
deploy
andrecreate
, both live in~/src/templates
. - Alse in
~/src/templates
, I have a sub-directory for each version of Drupal:d6
andd7
. - Within those version-specific sub-dirs are
db.sql
andfiles.tar
, which are used as the template.
When it's time to refresh my dev site, I go into ~/src/templates
and run deploy
with the version I want to refresh, like so: ./deploy 6
. Running this script will execute this process:
- Drop and re-create the database. This is to make sure that I don't wind up with stray tables left behind by modules I had been working on before.
- Import
db.sql
from the subdirectory for the version specific (in this case,d6
). - Remove the webroot directory (in this case,
~/Sites/d6.local
). - Re-create the webroot directory by expanding
files.tar
, also found in the version-specific subdirectory. - Use Drush to clear all the caches, just to be on the safe side.
Now I've got a fresh dev site at http://d6.local
. As I mentioned, I created the admin user and enabled some modules when I first setup the site, so after deploying from the template the site is ready to go.
As of tonight, I can also re-create these templates from the database and file structure. My recreate
bash script is similar to deploy
, but in reverse: it will take a snapshot of the site that's currenly running at http://d6.local
and save that as the template for future deploys. Running ./recreate 6
will execute this process:
- Move the existing
files.tar
anddb.sql
into a backup directory, just in case. - Use Drush to clear all the caches.
- Dump the database to
db.sql
. - Tar up the webroot directory into
files.tar
.
When new versions of the core or contrib modules come out, I just update my local copy of the site and run the recreate
script.
It's a pretty handy setup, and would be easy for other people to repurpose. If you want to use these scripts (the code is below), you may need to adjust the code to fit your own setup because of assumptions I made. These were the assumptions I worked with (using Drupal 6 as the version for these examples):
- Webroot is
~/Sites/d6.local
. - Templates are stored in
~/src/templates/d6
. - Database is named
dev_d6
. - Drush alias is named
@d6.local
, just like the webroot subdirectory.
You'll also need to modify the code to set the MySQL username and password for each line that runs MySQL.
And now for the code:
Add new comment