<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I swore I wouldn&#039;t &#187; Infrastructure</title>
	<atom:link href="http://www.wontblog.com/category/infrastructure/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wontblog.com</link>
	<description>Oh no, I&#039;m blogging now?</description>
	<lastBuildDate>Wed, 23 Feb 2011 20:06:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The change you wanted was rejected &#8211; Rails Problem</title>
		<link>http://www.wontblog.com/2010/07/15/the-change-you-wanted-was-rejected-rails-problem/</link>
		<comments>http://www.wontblog.com/2010/07/15/the-change-you-wanted-was-rejected-rails-problem/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 15:47:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Host]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.wontblog.com/?p=63</guid>
		<description><![CDATA[I received the error &#8220;The change you wanted was rejected&#8221; after I moved a rails app from one host to another. Looking into the log file, the following error appears: ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): /usr/lib/ruby/1.8/mongrel/rails.rb:76:in `process' /usr/lib/ruby/1.8/mongrel/rails.rb:74:in `synchronize' /usr/lib/ruby/1.8/mongrel/rails.rb:74:in `process' /usr/lib/ruby/1.8/mongrel.rb:159:in `process_client' /usr/lib/ruby/1.8/mongrel.rb:158:in `each' /usr/lib/ruby/1.8/mongrel.rb:158:in `process_client' /usr/lib/ruby/1.8/mongrel.rb:285:in `run' /usr/lib/ruby/1.8/mongrel.rb:285:in `initialize' /usr/lib/ruby/1.8/mongrel.rb:285:in `new' /usr/lib/ruby/1.8/mongrel.rb:285:in `run' /usr/lib/ruby/1.8/mongrel.rb:268:in `initialize' /usr/lib/ruby/1.8/mongrel.rb:268:in [...]]]></description>
			<content:encoded><![CDATA[<div class="diggbutton"><script type="text/javascript">digg_url = 'http://www.wontblog.com/2010/07/15/the-change-you-wanted-was-rejected-rails-problem/';digg_title = 'The change you wanted was rejected &#8211; Rails Problem';</script><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></div>
<p><img class="alignnone" title="The change I wanted was rejected?" src="http://img.skitch.com/20100715-bk5gad84u3ts11x9b7ctdndhb6.png" alt="" width="413" height="214" /></p>
<p>I received the error &#8220;The change you wanted was rejected&#8221; after I moved a rails app from one host to another.</p>
<p>Looking into the log file, the following error appears:</p>
<p><code> </code></p>
<p><code>ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):<br />
/usr/lib/ruby/1.8/mongrel/rails.rb:76:in `process'<br />
/usr/lib/ruby/1.8/mongrel/rails.rb:74:in `synchronize'<br />
/usr/lib/ruby/1.8/mongrel/rails.rb:74:in `process'<br />
/usr/lib/ruby/1.8/mongrel.rb:159:in `process_client'<br />
/usr/lib/ruby/1.8/mongrel.rb:158:in `each'<br />
/usr/lib/ruby/1.8/mongrel.rb:158:in `process_client'<br />
/usr/lib/ruby/1.8/mongrel.rb:285:in `run'<br />
/usr/lib/ruby/1.8/mongrel.rb:285:in `initialize'<br />
/usr/lib/ruby/1.8/mongrel.rb:285:in `new'<br />
/usr/lib/ruby/1.8/mongrel.rb:285:in `run'<br />
/usr/lib/ruby/1.8/mongrel.rb:268:in `initialize'<br />
/usr/lib/ruby/1.8/mongrel.rb:268:in `new'<br />
/usr/lib/ruby/1.8/mongrel.rb:268:in `run'<br />
/usr/lib/ruby/1.8/mongrel/configurator.rb:282:in `run'<br />
/usr/lib/ruby/1.8/mongrel/configurator.rb:281:in `each'<br />
/usr/lib/ruby/1.8/mongrel/configurator.rb:281:in `run'<br />
/usr/lib/ruby/1.8/mongrel/command.rb:212:in `run'</p>
<p></code></p>
<p><code>Rendering /vol/sites/site/public/422.html (422 Unprocessable Entity)<br />
</code></p>
<p>Some further investigation revealed that there was an issue with how rails 2.3.8 was handling cookies.  I stumbled upon the following fix at https://rails.lighthouseapp.com/projects/8994/tickets/4690.</p>
<p>I used Ken Collins&#8217; fix of adding his mongrel.rb (<a href="http://gist.github.com/471663">http://gist.github.com/471663</a>) to config/initializers and now all is well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wontblog.com/2010/07/15/the-change-you-wanted-was-rejected-rails-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML pages returned as plaintext, who is the culprit?</title>
		<link>http://www.wontblog.com/2010/07/15/html-pages-returned-as-plaintext-who-is-the-culprit/</link>
		<comments>http://www.wontblog.com/2010/07/15/html-pages-returned-as-plaintext-who-is-the-culprit/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 14:21:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[ec2]]></category>

		<guid isPermaLink="false">http://www.wontblog.com/?p=61</guid>
		<description><![CDATA[I have been moving applications from my Rackspace host over to Amazon&#8217;s EC2 service.  Moving simple LAMP apps has been fairly cut and dry, but while moving a RoR app and accessing it through apache w/ mod_proxy, the html is delivered to the browser as plaintext.  If I access the app directly on mongrel&#8217;s port, [...]]]></description>
			<content:encoded><![CDATA[<p><!--digg--><br />
<img class="alignnone" title="HTML served as plaintext" src="http://img.skitch.com/20100715-fi6q77pca8nms2r7xdm43b9nt.png" alt="" width="398" height="323" /></p>
<p>I have been moving applications from my Rackspace host over to Amazon&#8217;s EC2 service.  Moving simple LAMP apps has been fairly cut and dry, but while moving a RoR app and accessing it through apache w/ mod_proxy, the html is delivered to the browser as plaintext.  If I access the app directly on mongrel&#8217;s port, it renders correctly.   So it appears that something with either my mod_proxy configuration, or something about how my EC2 instance is set up is causing the problem.</p>
<p><code><br />
&gt; curl -I http://linux.local:3000<br />
HTTP/1.1 200 OK<br />
Connection: close<br />
Date: Thu, 15 Jul 2010 14:27:27 GMT<br />
Content-Length: 0</p>
<p>&gt; curl -I http://linux.local<br />
HTTP/1.1 200 OK<br />
Date: Thu, 15 Jul 2010 14:27:35 GMT<br />
Via: 1.1 linux.local<br />
Content-Type: text/plain<br />
</code></p>
<p>As you can see, when accessing the page through Apache/mod_proxy, the Content-Type that is returned is explicitly set as text/plain.</p>
<p><strong>Update</strong><br />
This is a bit shoe-horned, but it works for right now.  In the apache2.conf file, I changed the DefaultType from text/plain to text/html.  The reason this solution &#8220;concerns&#8221; me is that on my other servers, (where this problem is not occurring) the DefaultType is also set to text/plain, but the html is output correctly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wontblog.com/2010/07/15/html-pages-returned-as-plaintext-who-is-the-culprit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing MySQL gem on OS X</title>
		<link>http://www.wontblog.com/2010/04/26/installing-mysql-gem-on-os-x/</link>
		<comments>http://www.wontblog.com/2010/04/26/installing-mysql-gem-on-os-x/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:49:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Host]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.wontblog.com/?p=54</guid>
		<description><![CDATA[I encountered the following error when installing the mysql gem on a shiny new Macbook Pro running OS X Leopard. Note: I have ~/.gem set as my GEM_HOME and GEM_PATH to avoid needing to sudo &#62; gem install mysql Building native extensions. This could take a while... ERROR: Error installing mysql: ERROR: Failed to build [...]]]></description>
			<content:encoded><![CDATA[<p><!--digg--><br />
<img class="alignleft" title="RoR" src="http://img.skitch.com/20100426-mugukqdh7hp8fhhy6t476u3ued.png" alt="" width="173" height="178" />I encountered the following error when installing the mysql gem on a shiny new Macbook Pro running OS X Leopard.</p>
<p><em>Note: I have ~/.gem set as my GEM_HOME and GEM_PATH to avoid needing to sudo</em></p>
<p><code><br />
&gt;  gem install mysql<br />
Building native extensions.  This could take a while...<br />
ERROR:  Error installing mysql:<br />
ERROR: Failed to build gem native extension.</code></p>
<p><code>/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lm... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lz... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lsocket... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lnsl... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lmygcc... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
*** extconf.rb failed ***<br />
Could not create Makefile due to some reason, probably lack of<br />
necessary libraries and/or headers.  Check the mkmf.log file for more<br />
details.  You may need configuration options.<br />
</code></p>
<p>The workaround was fairly simple.  Since I had <a href="http://www.wontblog.com/2010/04/19/installing-mysql-from-source-on-os-x/">installed MySQL from source</a> the situation was resolved with a few command line options:</p>
<p><code><br />
&gt; export ARCHFLAGS="-arch x86_64"<br />
&gt; gem install mysql -- \<br />
--with-mysql-dir=/usr/local/mysql \<br />
--with-mysql-lib=/usr/local/mysql/lib \<br />
--with-mysql-include=/usr/local/mysql/include \<br />
--with-mysql-config=/usr/local/mysql/bin/mysql_config </code></p>
<p><code> </code></p>
<p><code>Building native extensions.  This could take a while...<br />
Successfully installed mysql-2.8.1<br />
1 gem installed<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wontblog.com/2010/04/26/installing-mysql-gem-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing MySQL from source on OS X</title>
		<link>http://www.wontblog.com/2010/04/19/installing-mysql-from-source-on-os-x/</link>
		<comments>http://www.wontblog.com/2010/04/19/installing-mysql-from-source-on-os-x/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 18:38:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Host]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.wontblog.com/?p=42</guid>
		<description><![CDATA[While MAMP has proven to be very convenient for doing local development, not having the MySQL header files around sometimes causes difficulty when it comes time to install/compile something that needs those header files to be in place. Getting Ready I always set up a src directory under my user account for these installations. &#62; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="MySQL on OS X" src="http://img.skitch.com/20100419-crtd938d279aqnig138thifa8x.png" alt="" width="256" height="256" />While <a href="http://www.mamp.info/" target="_blank">MAMP</a> has proven to be very convenient for doing local development, not having the MySQL header files around sometimes causes difficulty when it comes time to install/compile something that needs those header files to be in place.</p>
<p><strong>Getting Ready</strong><br />
I always set up a src directory under my user account for these installations.<br />
<code><br />
&gt; cd ~<br />
&gt; mkdir src<br />
&gt; cd src<br />
</code></p>
<p><strong><span style="font-weight: normal;"> </span> </strong></p>
<p><strong>Download MySQL Community Edition</strong><br />
At the time of this writing, it could be found at http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/mysql-5.1.45.tar.gz</p>
<p>Download this file into your src directory.<br />
<code><br />
&gt; curl -O http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.1/mysql-5.1.45.tar.gz<br />
</code></p>
<p><strong>Untar, configure, and install</strong><br />
<code><br />
&gt; tar -xvzf mysql-5.1.45.tar.gz<br />
&gt; cd mysql-5.1.45<br />
&gt; ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex \<br />
--enable-thread-safe-client --enable-local-infile --enable-shared \<br />
--with-plugins=innobase</code></p>
<p><code>&gt; make<br />
&gt; sudo make install</code></p>
<p><code> </code></p>
<p><code>&gt; cd /usr/local/mysql<br />
&gt; sudo ./bin/mysql_install_db --user=mysql<br />
&gt; sudo chown -R mysql ./var<br />
&gt; cd ..<br />
</code></p>
<p><em>MAMP specific issue</em></p>
<p>Given that I had installed MAMP previously, I had modified my /etc/my.cnf to specify that the mysql.sock was located in /Applications/MAMP/tmp/mysql/mysql.sock.  I modified this line to point to /usr/local/mysql/var/mysql.sock, and then set the sticky bit on the var directory.<br />
<code><br />
&gt; chmod 1777 /usr/local/mysql/var<br />
</code></p>
<p>There are other steps that can be added so that mysqld launches on startup, but I prefer to start it manually when it is needed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wontblog.com/2010/04/19/installing-mysql-from-source-on-os-x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dealing with a trojan virus on dreamhost</title>
		<link>http://www.wontblog.com/2010/04/18/dealing-with-a-trojan-virus-on-dreamhost/</link>
		<comments>http://www.wontblog.com/2010/04/18/dealing-with-a-trojan-virus-on-dreamhost/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 17:10:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Host]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[jerks]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.wontblog.com/?p=41</guid>
		<description><![CDATA[I host a lot of simple sites on Dreamhost.  Imagine my surprise when I went to log into my control panel and was informed that google had listed one of my sites as being a suspected malware site. The site that it referenced was a very rarely used site, that only housed a custom built [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="The anger sharks are circling" src="http://img.skitch.com/20100418-pbbujcjnmq12umy92a99a15sxk.png" alt="" width="323" height="275" />I host a lot of simple sites on Dreamhost.  Imagine my surprise when I went to log into my control panel and was informed that google had listed one of my sites as being a suspected malware site.</p>
<p>The site that it referenced was a very rarely used site, that only housed a custom built app (more of a script than an actual app) so I was puzzled as to how this site could have become infected.</p>
<p>I logged into the host, and did a quick check of the directory structure, and immediately noticed some suspicious things.<span id="more-41"></span></p>
<p><code><br />
-rw-r--r--   1 rgardner pg1704804     18716 2010-04-17 13:07 rargq.php<br />
drwxr-xr-x  13 rgardner pg1704804      4096 2010-04-17 13:07 .<br />
drwxr-xr-x   2 rgardner pg1704804     36864 2010-04-17 23:30 .files<br />
</code></p>
<p>I had never placed these here, so it was obvious that these were the culprits.  I quickly chmod&#8217;d the file so I could investigate it further, and then looked at the contents of the .files diectory.  This directory contained 692 static html files, all with the same general format/content:</p>
<p><code><br />
-rw-r--r--  1 rgardner pg1704804 10874 2010-04-17 23:17 kelly pavlik boxrec.html<br />
-rw-r--r--  1 rgardner pg1704804 11016 2010-04-17 23:17 mayhem miller twitter.html<br />
-rw-r--r--  1 rgardner pg1704804  9987 2010-04-17 23:17 the good shepherd cast.html<br />
-rw-r--r--  1 rgardner pg1704804 10456 2010-04-17 23:18 edison miranda.html<br />
-rw-r--r--  1 rgardner pg1704804 11071 2010-04-17 23:18 mayhem miller vs gsp.html<br />
-rw-r--r--  1 rgardner pg1704804 11297 2010-04-17 23:19 the good shepherd quotes.html<br />
-rw-r--r--  1 rgardner pg1704804 11949 2010-04-17 23:19 mayhem miller next fight.html<br />
-rw-r--r--  1 rgardner pg1704804 10394 2010-04-17 23:19 the good shepherd trailer.html<br />
-rw-r--r--  1 rgardner pg1704804 11427 2010-04-17 23:21 mayhem miller ninja warrior.html<br />
-rw-r--r--  1 rgardner pg1704804 10769 2010-04-17 23:21 kelly pavlik record.html<br />
-rw-r--r--  1 rgardner pg1704804  6261 2010-04-17 23:30 mayhem miller wiki.html<br />
</code></p>
<p>To identify where these were coming from, i looked at the apache access log for the time right around 2010-04-17 13:07 (the rarqp.php timestamp.)</p>
<p>I found the following lines from logs/access.log to be of interest:</p>
<p><code><br />
69.89.31.119 - - [17/Apr/2010:13:07:49 -0700] "POST /images/moselle_sorcha.php HTTP/1.1" 200 275 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; ru; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"<br />
69.89.31.119 - - [17/Apr/2010:13:07:49 -0700] "GET /rargq.php?m=test HTTP/1.1" 200 10259 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
</code></p>
<p>Somebody had managed to place a PHP script in my images directory, and then posted to that script, which then kicked off thousands upon thousands of requests like the following:</p>
<p><code><br />
67.195.112.60 - - [17/Apr/2010:13:16:12 -0700] "GET /robots.txt HTTP/1.0" 200 305 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
67.195.112.60 - - [17/Apr/2010:13:16:12 -0700] "GET /rargq.php?m=prom%20hairstyles%202010%20down%20dos HTTP/1.0" 200 5472 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
67.195.112.60 - - [17/Apr/2010:13:17:02 -0700] "GET /rargq.php?m=norfolk%20island%20pine%20poisonous%20to%20cats HTTP/1.0" 200 3954 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
67.195.112.60 - - [17/Apr/2010:13:17:08 -0700] "GET /rargq.php?m=lawrence%20wilson%20md HTTP/1.0" 200 4491 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
67.195.112.60 - - [17/Apr/2010:13:17:17 -0700] "GET /rargq.php?m=salt%20lake%20city%20marathon%20reviews HTTP/1.0" 200 4661 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
67.195.112.60 - - [17/Apr/2010:13:17:25 -0700] "GET /rargq.php?m=toyota.ca HTTP/1.0" 200 4470 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
67.195.112.60 - - [17/Apr/2010:13:17:37 -0700] "GET /rargq.php?m=sweetwater%20420%20fest HTTP/1.0" 200 4029 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
67.195.112.60 - - [17/Apr/2010:13:17:42 -0700] "GET /rargq.php?m=tx%20lottery%20live HTTP/1.0" 200 3809 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"<br />
</code></p>
<p>I found the file and saw that it had been placed on the server several months ago:<br />
<code><br />
-rw-r--r--  1 rgardner pg1704804 28116 2009-11-26 13:09 moselle_sorcha.php<br />
</code></p>
<p>Around this time, a client that I was hosting a blog for was notified that the blog software she was using was outdated and had a known vulnerability.  Apparently, I was now a victim of her vulnerable software.</p>
<p>Interested to see if there were other scripts, I ran the following:<br />
<code><br />
&gt; find -type f -wholename "*/images/*.php" | wc -l<br />
30<br />
</code></p>
<p>This meant that there were 30 of these files that had been placed on my server.  I removed the files with another command:</p>
<p><code><br />
&gt; find -type f -wholename "*/images/*.php" -mtime -150  -exec rm  {} \;<br />
</code><br />
<small><em>I added the mtime switch to exclude some known php scripts that I wanted to exclude</em></small><br />
<strong>Morals of the story</strong></p>
<ol>
<li>People are jerks</li>
<li>Potentially vulnerable software should be quarantined to reduce the impact of situations like this</li>
<li>Access logs should be routinely analyzed to watch for things like this</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.wontblog.com/2010/04/18/dealing-with-a-trojan-virus-on-dreamhost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing django with MySQL on OS X</title>
		<link>http://www.wontblog.com/2010/04/16/installing-django-on-os-x/</link>
		<comments>http://www.wontblog.com/2010/04/16/installing-django-on-os-x/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 15:16:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Host]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.wontblog.com/?p=39</guid>
		<description><![CDATA[I am experimenting with the django web-framework for a few projects at work.  I do the majority of my work in PHP or Java, but occasionally I like to play with Ruby on Rails, and decided that django deserved to have a look as well. The first step in this process is to get django [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Installing django" src="http://img.skitch.com/20100416-qs9itxb2iftngkeduru395cm6g.png" alt="" width="279" height="211" /></p>
<p>I am experimenting with the django web-framework for a few projects at work.  I do the majority of my work in PHP or Java, but occasionally I like to play with Ruby on Rails, and decided that django deserved to have a look as well.</p>
<p>The first step in this process is to get django and the various components installed.</p>
<ul>
<li>Python</li>
<li>EasyTools</li>
<li>MySql</li>
<li>MySqlDB</li>
<li>Django</li>
</ul>
<p><strong><span id="more-39"></span>Python</strong> &#8211; I do my development from a relatively new Macbook Pro, and as such, Python 2.6.1 is already installed.  This is confirmed by typing &#8216;python&#8217; from a terminal window.</p>
<blockquote><p>&gt; python</p>
<div id="_mcePaste">Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)</div>
<div id="_mcePaste">[GCC 4.2.1 (Apple Inc. build 5646)] on darwin</div>
<div id="_mcePaste">Type &#8220;help&#8221;, &#8220;copyright&#8221;, &#8220;credits&#8221; or &#8220;license&#8221; for more information.</div>
<div id="_mcePaste">&gt;&gt;&gt; ^D</div>
</blockquote>
<p><strong>EasyTools</strong> &#8211; Download the OS X of setup tools from <a href="http://pypi.python.org/pypi/setuptools#files">http://pypi.python.org/pypi/setuptools#files</a>, then run the .egg file as if it were an executable:</p>
<blockquote><p>sh setuptools-0.6c9-py2.4.egg</p></blockquote>
<p><strong>MySql </strong>- <span style="text-decoration: line-through;">I use MAMP (</span><a href="http://www.mamp.info" target="_blank"><span style="text-decoration: line-through;">http://www.mamp.info</span></a><span style="text-decoration: line-through;">) for my local PHP development (not sure how anybody could live without MAMP running locally.) MAMP provides a drop-in MySQL installation that I use for all of my local development purposes.  The one caveat to this is that it is not uncommon to run into scenarios where something is looking for a mysql_* executable that isn&#8217;t being found in the default location.</span></p>
<p>I previously was using MAMP for these installations, but found that at times, header files were needed for other installations, and MAMP isn&#8217;t really intended for this type of usage.  I still think MAMP is a great tool, but in this case, I needed to <a href="http://www.wontblog.com/2010/04/19/installing-mysql-from-source-on-os-x/" target="_blank">Install Mysql from source</a>.</p>
<p>Next, add the path to the mysql_* executables to your PATH.</p>
<blockquote><p>&gt; export PATH=/usr/local/mysql/bin:$PATH</p></blockquote>
<p><strong>MySqlDB</strong> &#8211; In order for python/django to be able to talk with MySQL, the MySQL DB driver needs to be installed.  This is an area that caused me a little bit of delay, as the installation of MySQL-python 1.2.3c1 was complaining about my lack of gcc.  I encountered a few posts that described how to get around this limitation with earlier versions of MySQL-python, but given that I do a lot of development, it felt like the right thing to do would be to install the Mac OSX Developer Tools.</p>
<blockquote><p>&gt; curl -O http://pypi.python.org/packages/2.6/M/MySQL-python/MySQL_python-1.2.3c1-py2.6-linux-i686.egg<br />
&gt; sudo easy_install MySQL_python-1.2.3c1-py2.6-linux-i686.egg</p></blockquote>
<p>If you receive errors about mysql, or gcc, then you need to re-visit your environment setup.</p>
<p><strong>Django</strong> &#8211; Once these pieces were in place, installing the actual django source code was trivial.</p>
<blockquote><p>&gt; svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk</p></blockquote>
<p>Next, make sure that the Python interpreter can load Django&#8217;s code. There are various ways of accomplishing this. One of the most convenient, on Linux, Mac OSX or other Unix-like systems, is to use a symbolic link:</p>
<blockquote><p>&gt; ln -s `pwd`/django-trunk/django SITE-PACKAGES-DIR/django</p></blockquote>
<p><em>Finding SITE-PACKAGES-DIR</em> -<br />
To find the location of the SITE-PACKAGES-DIR on your system, execute the following command from the command line:</p>
<blockquote><p>&gt; python -c &#8220;from distutils.sysconfig import get_python_lib; print get_python_lib()&#8221;</p></blockquote>
<p><strong>Add Django commands to PATH</strong> &#8211; I find it helpful to add the django bin directory to my PATH environment variable so that I have convenient access to the framework&#8217;s various commands:</p>
<blockquote><p>&gt; export PATH=SITE-PACKAGES-DIR/django/bin:$PATH</p></blockquote>
<p><strong>Earn $$$</strong> &#8211; Now that these pieces are in place, you can create your first django project by issuing the command:</p>
<blockquote><p>&gt; django-admin.py startproject mysite</p></blockquote>
<p>Overall the installation was a snap, on par with a Ruby on Rails installation.  Over the next few weeks, I will start developing some simple django projects and write a post describing the experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wontblog.com/2010/04/16/installing-django-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business continuity</title>
		<link>http://www.wontblog.com/2010/04/06/business-continuity/</link>
		<comments>http://www.wontblog.com/2010/04/06/business-continuity/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 14:18:05 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[continuity]]></category>
		<category><![CDATA[mozy]]></category>

		<guid isPermaLink="false">http://wontblog.com/?p=26</guid>
		<description><![CDATA[Seatbelts, insurance, and fail-safe backups. All things that you don&#8217;t completely respect the value of unless you use them. When I first started working at my consulting firm, they had an eye on continuity, and even had nightly backups to an external hard drive. This was reassuring, but still left something to be desired. First, [...]]]></description>
			<content:encoded><![CDATA[<p>Seatbelts, insurance, and fail-safe backups.  All things that you don&#8217;t completely respect the value of unless you use them.</p>
<p><img class="size-medium wp-image-29 alignleft" title="before" src="http://www.wontblog.com/wp-content/uploads/2010/04/before-300x225.jpg" alt="" width="300" height="225" /></p>
<p>When I first started working at my consulting firm, they had an eye on continuity, and even had nightly backups to an external hard drive.  This was reassuring, but still left something to be desired.  First, the router, wireless router, and backup drive were all located precariously close to the coffee maker.  It doesn&#8217;t take much imagination to envision an employee stumbling in for their morning brew inadvertently taking down the office connectivity, and our backup drive as well.</p>
<p><span id="more-26"></span></p>
<p><img class="size-medium wp-image-28 alignright" title="after" src="http://www.wontblog.com/wp-content/uploads/2010/04/after-300x225.jpg" alt="" width="300" height="225" />The solution for this problem was low tech and cost about $50.  A portable laptop desk allowed us to move the electronics elements to a safer temporary location (we&#8217;re moving to a new office in a month where we will be able to correctly house all electronics in a dedicated location.)</p>
<p>This also forced us to visit the question about what would happen if the backup drive were to be needed, but damaged.  An off-site solution was needed in order to reduce the risk of losing our data, or losing access to our data.  After some research, we opted for mozy as an offsite storage solution.    All local workstations now backup to the external drive nightly, and also push their changes to the mozy service.</p>
<p>Our online servers will require a slightly different solution.  While Mozy does offer remote backup for servers, this is only offered for Windows and Mac OS X servers, whereas our servers are both running Ubuntu Linux.  The solution for this was to buy a cheap desktop workstation (locked in a computer cabinet) and have it pick up nightly backups from the servers.  This backup workstation would then back itself up to Mozy on a nightly basis.  The backup server is attached to a UPS unit in case there are power issues.  Now, each machine is backed up to one external hard drive, and backed up to offsite storage as well.  In an upcoming post, I will post a script that I have used previously for backing up webservers.  This will need to be modified a touch to support our alfresco/liferay/cas installations, but the basics will still be the same.</p>
<p>Good luck in your backup efforts.  Don&#8217;t wait to get this set up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wontblog.com/2010/04/06/business-continuity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

