* Site Maintenance Maintenance
Posted on October 10th, 2008 by Phil. Filed under Apache, Drupal, MySQL, SVN, database.
One great thing about Drupal is being able to easily put your site into site maintenance mode. For example, if you need to perform some site maintenance work (like installing core or contributed module code updates) you can easily put the site into this mode by clicking a button on the following form:
What this will do is then direct all anonymous and non-admin users to a page using your chosen theme with a message that you write, which you plug into the message box. For WGBH.org, the page looks like this:
So - easy!
However, this page can’t be used for some types of site maintenance, like, for example, maintenance work that takes the database offline. No database, no Drupal-generated site maintenance page. Bummer.
We recently faced this problem when our fine friends in the WGBH IT department needed to do some MySQL maintenance work (they wanted to do a little cleanup and reorganization of the database files on the production server). Since this type of work comes up now and again, I wanted to devise an easy way to post the same site down page that all requests for the site would get directed to, with the minimal amount of work, so IT could incorporate it into their process for future maintenance work. I wanted a simple process to make everybody’s life as easy as possible.
My first thought was to have an alternate Apache config file for the site, which would point to a different document root that stored the site down code and graphics. This would work well enough, but would require stopping Apache and then restarting it using the new configuration file. Not too complicated, but still more steps then I wanted.
After some coffee and deep thinking the solution popped right out me: symbolic links!
The document root for the site is actually a symbolic link to the real directory of Drupal code. So, I figured, if we just change that link to point to a new document root, containing the site down code, then - bingo - we’d be done! That’s even easier than using an alternative Apache conf file.
So, this is what we did. There was just one other fine point here: where to put the site down directory?
Initially, I figured on a directory completely separate from the Drupal tree. However, that would then mean we’d need to copy all the required images and style sheets from the Drupal tree to the site down tree, making future maintenance a bit more work (we do tweak the site down page according to what’s going on at the time). Kind of a pain.
What we did instead was put the site down directory within the Drupal directory tree. That way the page code could reference the appropriate images and style sheets. Plus, that code then gets managed via SVN as part of our Drupal code base. The final approach, then, involved the following:
* Create a site_down directory under the top-level Drupal directory.
* Create an index.html file in that directory that contains the source code from the Drupal-generated site maintenance page.
* Tweak the source code to use absolute, rather than relative, links to images and CSS files.
* Create an .htaccess file to make sure all page requests get redirected to the index.html page.
Voila! Using this method, all IT had to do before performing their database maintenance was change the docroot’s symbolic link to point to the site down directory. Then, when the work was done, change the link back. No need to even stop/restart Apache.
So - once again - easy!
If only fixing the economy were so simple…
Do you have a different method for handling this sort of thing (or for fixing the economy)? Talk amongst yourselves then please share!
2 Responses to “Site Maintenance Maintenance”
Leave a Reply
You must be logged in to post a comment.
Archives:
- February 2009
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
Categories:
- Apache
- Architecture
- Boost
- caching
- CCK
- CMS
- cron
- CVS
- database
- Date
- Devel
- Drupal
- Drupalcon
- FeedAPI
- Flickr
- Image Assist
- Images
- Install Profiles
- MacBook
- Memcache
- MySQL
- NPR
- Pathauto
- PBS
- PHP
- Preview
- Protrack
- Public Media
- search
- Social Media
- SQL
- SVN
- tags
- Television
- Testing
- theme
- TinyMCE
- Token
- Tools
- TV Guide
- Uncategorized
- Views
- WordPress
Disclaimer
- The opinions expressed in here are those of the writers/contributors and do not necessarily represent the views or opinions of the WGBH Educational Foundation.













April 11th, 2009 at 10:12 am
My favorite approach for this — I’m doing this sort of stuff where I work lately as well — is to put a small, fast reverse proxy at the edge of my network (I use Apache, but you could use squid as well, if all your caching pragmas for dynamic items are set correctly), and then teach it where everything goes.
If your Apache configs are broken up correctly, then taking a piece of an internal site off line becomes merely a question of swapping a config file and doing a Graceful.
Often, if a problem is hard to solve, the best idea is to try to find a way to substitute a problem that’s easy to solve.
Not that symlinks aren’t clever, mind; but what happens if you have to take the whole machine down?
A couple of round-robin reverse proxies with synchronized config files make that trivial.
PS: Do you have a copy of TPOSANA on your shelf? Limoncelli put some great skullsweat into that book.
April 11th, 2009 at 10:14 am
Oh, a quick followup: Go to your dynamic site-down page, use your browser to save it as an HTML file with all attachments…
and copy that to the appropriate server to use as your static site-down page. You may need to grab the CSS manually…
(Captain Obvious, signing off