<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Jeff Owens.com»  – Jeff Owens.com</title>
	
	<link>http://blog.jeff-owens.com</link>
	<description>Where Ignorance Is Not Bliss</description>
	<lastBuildDate>Fri, 19 Feb 2010 12:09:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/JeffOwens" /><feedburner:info uri="jeffowens" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Using SSH to Safely Surf With Free WiFi</title>
		<link>http://blog.jeff-owens.com/security/using-ssh-to-safely-surf-with-free-wifi/</link>
		<comments>http://blog.jeff-owens.com/security/using-ssh-to-safely-surf-with-free-wifi/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 04:25:58 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[safe]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[surfing]]></category>
		<category><![CDATA[tunnel]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/?p=153</guid>
		<description><![CDATA[If you are like me, you take advantage of free WiFi hotspots where ever you can find them.  Unfortunately it is possible for thieves to also be on that WiFi hotspot.
Before I show you one way to surf securely when using an open wireless network on a Mac, here are some steps that can [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jeff-owens.com/wp-content/uploads/2010/02/surfing.jpg" alt="surfing Using SSH to Safely Surf With Free WiFi" border="0" width="275" height="258" align="right" title="Using SSH to Safely Surf With Free WiFi" />If you are like me, you take advantage of free WiFi hotspots where ever you can find them.  Unfortunately it is possible for thieves to also be on that WiFi hotspot.</p>
<p>Before I show you one way to surf securely when using an open wireless network on a Mac, here are some steps that can help to keep you safe:</p>
<p>1.  Turn your software firewall on.  This goes for Mac or PC.<br />
2.  If you have access to a VPN (Virtual Private Network), use it when connecting on any open wireless network!<br />
3.  If you plan on checking your web based email make sure that you are connected over an SSL connection before entering your user credentials.<br />
4.  Check with the hotspot owner to make sure you know the name of their legitimate SSID.<br />
5.  Beware of fake SSID names such as &#8220;Free Public WiFi&#8221;.</p>
<p><span id="more-153"></span><br />
The method below requires you to have access to a server with SSH installed and a Mac.  </p>
<p>Open the Terminal application and type in the following:</p>
<p>ssh -D 8080 -f -C -q -N yourusername@yourserver.com</p>
<p>If your ssh server uses a different port than the default, you can add it like this (-p 7778):</p>
<p>ssh -D 8080 -f -C -q -N -p 7778 yourusername@yourserver.com</p>
<p>If you are prompted for a password enter it.  The SSH tunnel should now be working.  Next we will setup the SOCKS proxy.  Open System Preferences / Network / Advanced / Proxies.  Check the box next to &#8220;Socks Proxy&#8221; and  set the &#8220;SOCKS Proxy server&#8221; text boxes to localhost : 8080.  You should now be good to go.  </p>
<p>To make sure you are setup correctly, go to a site like <a href="http://www.whatsmyip.org/">What&#8217;s My IP</a> and make sure the IP address displayed matches your servers IP address.  Happy surfing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/security/using-ssh-to-safely-surf-with-free-wifi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beach-ball of Death</title>
		<link>http://blog.jeff-owens.com/productivity/beach-ball-of-death/</link>
		<comments>http://blog.jeff-owens.com/productivity/beach-ball-of-death/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 03:22:32 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[beachball osx external drive snowleopard firewire freeze]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/?p=148</guid>
		<description><![CDATA[If you&#8217;ve had issues with your Mac hanging after it has been a sleep, and you have an external drive connected to it, join the club.  The problem for me was that I had my Energy Saver preferences set to place the external hard drive to sleep whenever possible.  I now use a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jeff-owens.com/wp-content/uploads/2010/02/beach_ball.jpg" alt="beach ball Beach ball of Death" border="0" width="256" height="192" align="left" title="Beach ball of Death" />If you&#8217;ve had issues with your Mac hanging after it has been a sleep, and you have an external drive connected to it, join the club.  The problem for me was that I had my Energy Saver preferences set to place the external hard drive to sleep whenever possible.  I now use a simple workflow that has corrected the problem on my iMac. </p>
<p>I  have the checkbox that reads &#8220;Put the hard disk(s) to sleep whenever possible&#8221; unchecked.  I also have the &#8220;Computer sleep&#8221; settings pointing to &#8220;Never&#8221;.  This way my drive is always available.  If I know I&#8217;m finished using my iMac and I&#8217;m not going to be using it, and I want to change the settings so that it will go to sleep, then I unmount/eject my external hard drive and turn it off.  This way my iMac can comfortably go to sleep and wake up without losing the connection to the external drive.  After the iMac is awake, I reconnect the external drive and it automatically mounts the drive.  I then turn the &#8220;Computer sleep&#8221; mode to &#8220;Never&#8221; again.  </p>
<p>It is a little bit of a hassle, but since I&#8217;ve adopted this workflow with my 1.5 Terra-byte Firewire drive, I&#8217;ve had no issues.  Do you have any better or different solutions?  Post them in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/productivity/beach-ball-of-death/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Loves Music</title>
		<link>http://blog.jeff-owens.com/music/google-loves-music/</link>
		<comments>http://blog.jeff-owens.com/music/google-loves-music/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 15:38:06 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/?p=131</guid>
		<description><![CDATA[
Music fans rejoice, today Google is rolling out a new music search feature that allows you to discover music through an audio preview feature.  Type in the name or part of a name from a song and Google will find it and offer you an audio preview.
They have partnered with MySpace, Lala, Pandora, iMeem [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://blog.jeff-owens.com/wp-content/uploads/2009/10/google-music-two.png" alt="google music two Google Loves Music" border="0" width="439" height="170" title="Google Loves Music" /></div>
<p>Music fans rejoice, today Google is rolling out a new music search feature that allows you to discover music through an audio preview feature.  Type in the name or part of a name from a song and Google will find it and offer you an audio preview.</p>
<p>They have partnered with MySpace, Lala, Pandora, iMeem and Rhapsody to license these musical previews.  With Google&#8217;s search algorithms combined with their new content partners, searching for music online just got a whole lot easier.  They plan to roll out this feature across the U.S. in the next couple of days.  Try it out, and let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/music/google-loves-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intuit Purchases the Financial Wizards at Mint.com</title>
		<link>http://blog.jeff-owens.com/technology/intuit-purchases-the-financial-wizards-at-mint-com/</link>
		<comments>http://blog.jeff-owens.com/technology/intuit-purchases-the-financial-wizards-at-mint-com/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 00:19:48 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/?p=121</guid>
		<description><![CDATA[
I have to admit upfront that I&#8217;ve had a Mint.com account for a very long time and never used it.  Every time I went to enter my account information something made me pause.
&#8220;What am I thinking?  I am really going to trust them with all of my money?&#8221;
When a technology journalist I like [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://blog.jeff-owens.com/wp-content/uploads/2009/09/mint.jpg" border="0" alt="mint Intuit Purchases the Financial Wizards at Mint.com" width="439" height="262" title="Intuit Purchases the Financial Wizards at Mint.com" /></div>
<p>I have to admit upfront that I&#8217;ve had a <a href="http://www.mint.com">Mint.com</a> account for a very long time and never used it.  Every time I went to enter my account information something made me pause.</p>
<blockquote><p>&#8220;What am I thinking?  I am really going to trust them with all of my money?&#8221;</p></blockquote>
<p>When a technology journalist I like to follow mentioned that he finally entered his account information because his security concerns had finally been met, I thought I would finally take the plunge.  Then, suddenly out of nowhere, Intuit decides to buy Mint.com.</p>
<p><span id="more-121"></span></p>
<p>This turn of events has made me pause once more.  What exactly will the purchase mean for Mint.com?  Many in the blogosphere who like Mint predict it&#8217;s the beginning of it&#8217;s demise.  They don&#8217;t like Intuit&#8217;s <a href="http://quicken.intuit.com/">website</a> and think the same people will bring their terrible ideas to Mint.</p>
<p>The founder of Mint.com, Aaron Patzer, wrote in a blog post that this:</p>
<blockquote><p>&#8220;could bring Mint.com&#8217;s unique approach to personal financial management to millions more consumers and small businesses.&#8221;</p></blockquote>
<p>The interesting thing to note is that both the Windows and Mac updates to Intuit&#8217;s desktop Quicken software is about to ship and won&#8217;t get to see any of Aaron&#8217;s &#8220;unique approach&#8221;.  Indeed, Intuit publicist Scott Gulbransen has confirmed as much.</p>
<p>So&#8230;I&#8217;m back where I was, interested in Mint&#8217;s online service (I think I&#8217;d love the iPhone app), but afraid to take the plunge.</p>
<p>Do you use Quicken Online or Mint?  How do you think this will affect you?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/technology/intuit-purchases-the-financial-wizards-at-mint-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snow Leopard Clean Install Tutorial</title>
		<link>http://blog.jeff-owens.com/mac-osx/snow-leopard-clean-install-tutorial/</link>
		<comments>http://blog.jeff-owens.com/mac-osx/snow-leopard-clean-install-tutorial/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 22:23:30 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Mac OSX]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/?p=105</guid>
		<description><![CDATA[Wondering if it&#8217;s possible to do a clean install of Snow Leopard on your Mac?  Turns out you can.  In this tutorial I&#8217;ll show you the steps to do just that.
But before we plop the DVD into our Mac, we have to do some preparatory work.  Make sure you&#8217;ve checked to see [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border: 0pt none;" title="Snow Leopard" src="http://blog.jeff-owens.com/wp-content/uploads/2009/09/Snow-Leopard-Blog.jpg" border="0" alt="Snow Leopard Blog.jpg" width="384" height="240" align="right" />Wondering if it&#8217;s possible to do a clean install of Snow Leopard on your Mac?  Turns out you can.  In this tutorial I&#8217;ll show you the steps to do just that.</p>
<p>But before we plop the DVD into our Mac, we have to do some preparatory work.  Make sure you&#8217;ve checked to see that all of your critical applications that you use are compatible with Snow Leopard.  You can find a compatibility list <a href="http://snowleopard.wikidot.com/">here</a>.</p>
<p>Next you will need an external hard drive that you&#8217;ve successfully connected to your Mac.  It should have enough space to do a complete backup.</p>
<p><span id="more-105"></span></p>
<blockquote><p><strong>NOTE:</strong> You should always do a complete backup of your Mac before doing a clean install.  The word &#8220;clean&#8221; is used in this tutorial because we are going to format our hard drive, wiping it clean of everything.  Unless you don&#8217;t care about losing <strong>all your data</strong>, back it up!  I use SuperDuper to create a bootable image of my entire system, but a TimeMachine backup would work as well.</p></blockquote>
<p>Now write down or take screenshots of your connected network settings (Ethernet, AirPort, or both).  The settings can be found under &#8220;System Preferences/Network&#8221;.  Since we will be wiping the hard drive and the external hard drive, you will need to either print the settings out or save them to an external USB thumb-drive.</p>
<p>So first things first:</p>
<ol>
<li> Backup your entire machine with TimeMachine, <a href="http://www.shirt-pocket.com/SuperDuper/">SuperDuper</a>, or some other method to an external hard drive.</li>
<li>If your backup is bootable, SuperDuper&#8217;s is by default, try it now.  Click on &#8220;System Preferences&#8221; and then double-click on &#8220;Startup Disk&#8221; near the bottom.  Select your external hard drive and click &#8220;Restart&#8230;&#8221;.  If you can log back into your Mac then you are good to go.  Once logged in, complete the same procedure again, this time selecting your Macintosh HD and before clicking &#8220;Restart&#8230;&#8221;.</li>
<li>Now the fun begins!  Put your Snow Leopard DVD into your computer.  <strong>Make sure no external hard drive or device is connected to your computer.</strong></li>
<li>Go to the Apple Menu and select &#8220;Restart&#8230;&#8221;  When the computer begins to reboot press and hold down the &#8220;c&#8221; key on your keyboard.  An Apple logo will appear and then you should see a spinning icon.  When the spinning icon shows up you can let go of the key.<img class="alignleft" style="border: 0pt none; padding-top: 10px;" title="Apple Logo" src="http://blog.jeff-owens.com/wp-content/uploads/2009/09/apple_logo1.jpg" border="0" alt="apple_logo.jpg" width="220" height="135" /><br />
<img class="alignright" style="border: 0pt none; padding-top: 10px;" title="Apple Logo With Spinner" src="http://blog.jeff-owens.com/wp-content/uploads/2009/09/apple_logo_spinning1.jpg" border="0" alt="apple_logo_spinning.jpg" width="220" height="137" align="right" /><br style="clear:both;" /></li>
<li><img class="alignright" style="border: 0pt none; padding-left: 15px;" title="Pick Your Language" src="http://blog.jeff-owens.com/wp-content/uploads/2009/09/pick_language.jpg" border="0" alt="pick language Snow Leopard Clean Install Tutorial" width="170" height="240" />After a minute or so you should see a Snow Leopard screen appear asking you to pick your language.  English is the default.  Select your language and hit &#8220;Enter&#8221;.</li>
<li> After another minute you should see a screen appear that says Welcome to OS X Snow Leopard.  Go to the Utilities menu and select Disk Utility.  You should see your hard drive over on the left-hand side of the window.  Click on it once to select it.  Now, click on the &#8220;Erase&#8221; tab.  Make sure the Format drop-down box is set to &#8220;Mac OS Extended (journaled)&#8221;.  Click on the &#8220;Name&#8221; text box and name your new hard drive.  Click on the third button on the bottom right that says &#8220;Erase&#8221;.  Snow Leopard will ask you if you are sure. You did back everything up right???  If so, go ahead.<br />
<br style="clear:both;" /></p>
<div style="text-align:center; padding:10px;"><img style="border: 0pt none;" title="Erase Hard Drive" src="http://blog.jeff-owens.com/wp-content/uploads/2009/09/erase.jpg" border="0" alt="erase Snow Leopard Clean Install Tutorial" width="500" height="437" /></div>
</li>
<li>Quit the Disk Utility program.  Click &#8220;Continue&#8221; to install Mac OS X.  Agree to the terms and select your newly formatted hard drive.</li>
<li>Click on the &#8220;Customize&#8221; button on the lower left.  Make sure you add &#8220;Rosetta&#8221;.  This will enable you to run applications compiled for the PowerPC family of processors under Snow Leopard.  Go ahead and continue the install.  You will eventually be prompted to provide your Country and type of Keyboard.  Fill both of those in and continue.</li>
<li>When you get to the screen that says &#8220;Do You Already Own a Mac?&#8221; select the &#8220;Do no transfer my information now&#8221; radio button.  You can always transfer your data later using the built in Migration Assistant program which is found under the Applications/Utilities folder.  Now would be a good time to get a drink, because after you hit the &#8220;Continue&#8221; button it will appear as if the Snow Leopard install has hung-up, because nothing seems to change.  However, this is not the case, just finish your drink and patiently wait.</li>
<li>The next window to appear is called &#8220;Your Internet Connection&#8221;.  Select &#8220;Using DHCP&#8221; for the TCP/IP Connection Type.  Follow the prompts to fill in your Apple ID and Registration information.  After you&#8217;ve filled out their &#8220;A Few More Questions&#8221; form and created your user account, you are almost done!</li>
<li>Quick, go comb your hair or put on a hat or something, because now Apple will want to take your picture for your user account.  Or you can always just pick an icon from the list and change it later.  Select your Time Zone, set the date and time, and your install is
<div style="text-align:center; padding:10px;"><img style="border: 0pt none;" title="New Cat!" src="http://blog.jeff-owens.com/wp-content/uploads/2009/09/desktop_leopard.jpg" border="0" alt="desktop leopard Snow Leopard Clean Install Tutorial" width="500" height="375" /></div>
<p>done!</li>
<li><strong>For extra geek points.</strong> When the &#8220;Mac OS X Install DVD&#8221; appears on the desktop, double-click on Optional Installs.  Install the Xcode.mpkg.  If your into programming this will install all of the gcc libraries you will need if you are interested in compiling binaries, or wanting to look at Cocoa.</li>
<li>Enjoy your new cat.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/mac-osx/snow-leopard-clean-install-tutorial/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google Reader Gets Speeeeed</title>
		<link>http://blog.jeff-owens.com/google/google-reader-gets-speeeeed/</link>
		<comments>http://blog.jeff-owens.com/google/google-reader-gets-speeeeed/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 02:01:27 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[feeds]]></category>
		<category><![CDATA[PubSubHubbub]]></category>
		<category><![CDATA[reader]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[speed]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/index.php/2009/08/05/google-reader-gets-speeeeed/</guid>
		<description><![CDATA[Culled from one of the 20% Google projects co-creators Mihai Parparita, Brett Slatkin and Brad Fitzpatrick came up with PubSubHubbub, a way to increase efficiency across the cloud and decentralize services.
This means that instead of continuously polling or requesting for news feed updates, the feed now will automatically update or push on its own via [...]]]></description>
			<content:encoded><![CDATA[<p>Culled from one of the 20% Google projects co-creators Mihai Parparita, Brett Slatkin and Brad Fitzpatrick came up with PubSubHubbub, a way to increase efficiency across the cloud and decentralize services.</p>
<p>This means that instead of continuously polling or requesting for news feed updates, the feed now will automatically update or push on its own via a distributed model. There is no more waiting and updates are now close to real time. </p>
<p>Read more about it here:  <a href="http://www.readwriteweb.com/archives/speeding_the_feed_google_reader_and_pubsubhubbub.php">Speed in the Feed: Google Reader and PubSubHubbub</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/google/google-reader-gets-speeeeed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome OS</title>
		<link>http://blog.jeff-owens.com/betas/google-chrome-os/</link>
		<comments>http://blog.jeff-owens.com/betas/google-chrome-os/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 11:13:29 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Betas]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[os]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/index.php/2009/07/08/google-chrome-os/</guid>
		<description><![CDATA[In a stunning announcement last night, Google has indicated it&#8217;s desire to create a new Operating System based on it&#8217;s Chrome browser, taking full aim at Microsoft:

Because we&#8217;re already talking to partners about the project, and we&#8217;ll soon be working with the open source community, we wanted to share our vision now so everyone understands [...]]]></description>
			<content:encoded><![CDATA[<p>In a stunning announcement last night, Google has indicated it&#8217;s desire to create a new Operating System based on it&#8217;s Chrome browser, taking full aim at Microsoft:<br />
<blockquote>
<p>Because we&#8217;re already talking to partners about the project, and we&#8217;ll soon be working with the open source community, we wanted to share our vision now so everyone understands what we are trying to achieve.</p>
<p>&#8230;And as we did for the Google Chrome browser, we are going back to the basics and completely redesigning the underlying security architecture of the OS so that users don&#8217;t have to deal with viruses, malware and security updates.</p>
<p>&#8230;Google Chrome OS is being created for people who spend most of their time on the web, and is being designed to power computers ranging from small netbooks to full-size desktop systems.</p>
<p>&#8230;Even more importantly, they don&#8217;t want to spend hours configuring their computers to work with every new piece of hardware, or have to worry about constant software updates.</p></blockquote>
<p>Let the OS wars begin.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/betas/google-chrome-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone 3.0 Gives Media A Boost</title>
		<link>http://blog.jeff-owens.com/product-review/iphone-30-gives-media-a-boost/</link>
		<comments>http://blog.jeff-owens.com/product-review/iphone-30-gives-media-a-boost/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 18:22:24 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Product Review]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[os]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/index.php/2009/06/09/iphone-30-gives-media-a-boost/</guid>
		<description><![CDATA[As a registered iPhone Developer you are allowed to try out new builds of the iPhone Operating system to allow you to develop against an actual iPhone instead of just the provided iPhone emulator.I&#8217;ve been fortunate enough to be using the 3.0 builds for quite some time and now that Apple has announced the full [...]]]></description>
			<content:encoded><![CDATA[<p>As a registered iPhone Developer you are allowed to try out new builds of the iPhone Operating system to allow you to develop against an actual iPhone instead of just the provided iPhone emulator.I&#8217;ve been fortunate enough to be using the 3.0 builds for quite some time and now that Apple has announced the full feature set of the new O.S. here are some first impressions on some of the features:
<ul>
<li>Cut and Paste &#8211; It works great, but the funny thing is I use a lot more than I thought I would.  Maybe Steve was right after all, LOL.*Waves Hand*&#8221;You don&#8217;t need cut-and-paste.  This is not the text you were looking for&#8221;</li>
<li>Media Downloads &#8211; I had been waiting for this for some time.  You can now download movies, TV shows, and audio books from iTunes on your iPhone.  I&#8217;m actually downloading &#8220;Predicatably Irrational&#8221; on my iPhone while writing this Blog entry, nice!  You need Wifi for this functionality, and it will take a while to download your book.  Don&#8217;t try this on a low battery!</li>
<li>Landscape Keyboard &#8211; Finally!  You can now use landscape mode with your email, notes, and Safari.</li>
<li>MMS &#8211; ready as far as the iPhone is concerned, but AT&amp;T still hasn&#8217;t got their act together.  AT&amp;T says they are working on MMS and it will be ready sometime at the end of the summer&#8230;Grrrrrr.</li>
<li>Internet Tethering &#8211; Don&#8217;t get excited, AT&amp;T hasn&#8217;t got this feature working either.  They are getting really annoying.  And you better believe that if/when they allow tethering at all, they will charge a lot for the privilege.</li>
<li>Spotlight Search &#8211; You will love this feature, I use it constantly.  Here&#8217;s a tip, use it to launch your Applications.  No more remembering what screen that app is on, just start typing the first few letters of your Applications name and away you go!</li>
<li>Voice Dialing &#8211; Sorry Charlie, this feature is only on the new iPhone 3GS and isn&#8217;t a part of the 3.0 update.  My personal reaction?  Whaaaaaaah!  *Stomps Foot*  I want it, I want it.</li>
<li>Voice Memos &#8211; Kinda lame, really.  Works O.K. but has absolutely no features at all.  Think of it as just a big, red, record button.  Wait a minute, that&#8217;s exactly what it is.</li>
<li>Turn By Turn and Video Recording &#8211; Fooled you.  You don&#8217;t get these either. Buy the new iPhone 3GS.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/product-review/iphone-30-gives-media-a-boost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon.com: Kindle 2</title>
		<link>http://blog.jeff-owens.com/product-review/amazoncom-kindle-2/</link>
		<comments>http://blog.jeff-owens.com/product-review/amazoncom-kindle-2/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 12:07:46 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Product Review]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[product]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/index.php/2009/02/10/amazoncom-kindle-2/</guid>
		<description><![CDATA[
I thought the first generation of the Kindle was an interesting idea but overpriced and feature poor.  With the new Kindle 2, Amazon has released a product that I believe is still overpriced  but will get much wider adoption.  The key feature is that the Kindle is always connected to the Internet allowing [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.jeff-owens.com/wp-content/uploads/2009/02/a47d965a-6f8b-470c-a9f5-2cbad881d73f.jpg" alt="A47D965A-6F8B-470C-A9F5-2CBAD881D73F.jpg" style="display: block; margin-left: auto; margin-right: auto" border="0" width="480" height="143" title="Amazon.com: Kindle 2" /></p>
<p>I thought the first generation of the Kindle was an interesting idea but overpriced and feature poor.  With the new Kindle 2, Amazon has released a product that I believe is still overpriced  but will get much wider adoption.  The key feature is that the Kindle is always connected to the Internet allowing the download of fresh content 24/7.  Since Amazon doesn&#8217;t charge users a monthly connection fee, they are out only the initial cost of purchase.  The new Kindle is much thinner and now holds over 1,500 books. And Kindle 2 even reads to you, with a “Read to Me”, Text to Speech engine.  But the sweetest detail that Amazon isn&#8217;t really marketing (still a rumor) is that the Kindle 2 will sync with mobile devices. This Whispersync feature will allow your iPhone or other mobile device to read Kindle content.  The one showstopper for me however is that the Kindle 2 doesn&#8217;t allow users to upload their own content to the device.</p>
<h3 style="padding-bottom: 20px">New Features &amp; Enhancements</h3>
<ul>
<li> <strong>Slim &amp; Lightweight:</strong> Just over 1/3 inch and 10.2 ounces<br />
Books in under 60 seconds: Get books delivered in less than 60 seconds; no PC required</li>
<li> <strong>Improved Display:</strong> Reads like real paper; now boasts 16 shades of gray for crisp images and text; even reads well in bright sunlight</li>
<li> <strong>Longer Battery Life:</strong> 25% longer battery life; read for days without recharging</li>
<li> <strong>More Storage:</strong> Take your library with you; holds over 1,500 books</li>
<li> <strong>Faster Page Turns:</strong> 20% faster page turns</li>
<li> <strong>Read-to-Me:</strong> Text-to-Speech feature means Kindle can read every book, blog, magazine, and newspaper out loud.</li>
<li> <strong>No Wireless Bills:</strong> No monthly wireless bills, data plans, or commitments. Amazon pays for Kindle’s wireless connectivity so you won’t see a monthly wireless bill.</li>
<li> <strong>Large Selection:</strong> Over 230,000 books, plus U.S. and international newspapers, magazines and blogs available</li>
<li> <strong>Low Book Prices:</strong> New York Times Best Sellers and New Releases $9.99, unless marked otherwise</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/product-review/amazoncom-kindle-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Full Rails Stack Part Four: Capistrano, MySQL</title>
		<link>http://blog.jeff-owens.com/rails/full-rails-stack-part-four-capistrano/</link>
		<comments>http://blog.jeff-owens.com/rails/full-rails-stack-part-four-capistrano/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 17:53:08 +0000</pubDate>
		<dc:creator>Jeff Owens</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://blog.jeff-owens.com/index.php/2008/03/05/full-rails-stack-part-four-capistrano/</guid>
		<description><![CDATA[We completed our subversion setup in part three, now let's add Capistrano deployment to the mix.  Let's go ahead and ssh into our server:
PLAIN TEXT
CODE:




ssh -p 8888 deploy@your_linux_box.com 






Add the following new directories to our server.  This is where our staging and production factory websites will be deployed to:
PLAIN TEXT
CODE:




sudo mkdir /var/www


sudo mkdir [...]]]></description>
			<content:encoded><![CDATA[<p>We completed our subversion setup in part <a href="http://blog.jeff-owens.com/index.php/2008/03/04/full-rails-stack-part-three-project-and-subversion/">three</a>, now let's add Capistrano deployment to the mix.  Let's go ahead and ssh into our server:</p>
<div class="igBar"><span id="lcode-32"><a href="#" onclick="javascript:showPlainTxt('code-32'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-32">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ssh -p <span style="color:#800000;color:#800000;">8888</span> deploy@your_linux_box.<span style="">com</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Add the following new directories to our server.  This is where our staging and production factory websites will be deployed to:</p>
<div class="igBar"><span id="lcode-33"><a href="#" onclick="javascript:showPlainTxt('code-33'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-33">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo mkdir /var/www</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo mkdir /var/www/apps</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo chown -R deploy:deploy /var/www/apps </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><span id="more-50"></span>Exit out of our linux server.  Run the following command to see a list of our locally installed ruby gems:</p>
<div class="igBar"><span id="lcode-34"><a href="#" onclick="javascript:showPlainTxt('code-34'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-34">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">gem list --local </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Notice we don't have Capistrano installed yet.  Let's rectify that and install some other gems we'll use to add staging ability if we need it on a project:</p>
<div class="igBar"><span id="lcode-35"><a href="#" onclick="javascript:showPlainTxt('code-35'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-35">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo gem install capistrano --include-dependencies</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo gem install capistrano-ext --include-dependencies</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo gem install palmtree --include-dependencies </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Note that sometimes you have to try more than once to install ruby gems.  If you get a timeout error just try it again.  Go ahead and change directories to the new subversion project directory we had created in part three.  Now we will setup our project for Capistrano deployment.</p>
<div class="igBar"><span id="lcode-36"><a href="#" onclick="javascript:showPlainTxt('code-36'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-36">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">capify .</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="">cat</span> /dev/null&nbsp; &gt; config/deploy.<span style="">rb</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now paste in the following deploy.rb code from this <a href="http://blog.jeff-owens.com/deploy.rb">link</a> into your deploy.rb file.  Edit the line where it has set :repository and change the IP to your linux server.  Save the file in nano.</p>
<div class="igBar"><span id="lcode-37"><a href="#" onclick="javascript:showPlainTxt('code-37'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-37">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/deploy.<span style="">rb</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Let's create a maintenance page so that if we ever need to take our site down to do server maintenance we're good to go:</p>
<div class="igBar"><span id="lcode-38"><a href="#" onclick="javascript:showPlainTxt('code-38'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-38">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano app/views/layouts/maintenance.<span style="">html</span>.<span style="">erb</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Paste in the html code from this <a href="http://blog.jeff-owens.com/maintenance.txt">link</a> and save the file in nano.  Now let's create the folder structure for our different stages:</p>
<div class="igBar"><span id="lcode-39"><a href="#" onclick="javascript:showPlainTxt('code-39'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-39">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mkdir config/deploy</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mkdir config/deploy/production</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mkdir config/deploy/staging </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Let's create the mongrel_cluster.yml file for production:</p>
<div class="igBar"><span id="lcode-40"><a href="#" onclick="javascript:showPlainTxt('code-40'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-40">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/deploy/production/mongrel_cluster.<span style="">yml</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Paste the following in and then save the file in nano.</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="">user</span>: deploy</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">group: deploy</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cwd: /var/www/apps/factory/current</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">port: <span style="color:#CC0000;">"9300"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">environment: production</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">address: <span style="color:#800000;color:#800000;">127</span>.<span style="color:#800000;color:#800000;">0</span>.<span style="color:#800000;color:#800000;">0</span>.<span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">pid_file: <span style="color:#CC0000;">"/var/run/mongrel_cluster/factory.pid"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log_file: <span style="color:#CC0000;">"log/factory.log"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">servers: <span style="color:#800000;color:#800000;">3</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's setup staging:</p>
<div class="igBar"><span id="lcode-41"><a href="#" onclick="javascript:showPlainTxt('code-41'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-41">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/deploy/staging/mongrel_cluster.<span style="">yml</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Paste the following in and then save the file in nano.</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="">user</span>: deploy</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">group: deploy</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cwd: /var/www/apps/qa.<span style="">factory</span>/current</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">port: <span style="color:#CC0000;">"9200"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">environment: staging</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">address: <span style="color:#800000;color:#800000;">127</span>.<span style="color:#800000;color:#800000;">0</span>.<span style="color:#800000;color:#800000;">0</span>.<span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">pid_file: <span style="color:#CC0000;">"/var/run/mongrel_cluster/qafactory.pid"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log_file: <span style="color:#CC0000;">"log/qafactory.log"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">servers: <span style="color:#800000;color:#800000;">2</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>We also need to create a config/environments/staging.rb file:</p>
<div class="igBar"><span id="lcode-42"><a href="#" onclick="javascript:showPlainTxt('code-42'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-42">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/environments/staging.<span style="">rb</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Paste in the following and save in nano</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">config.<span style="">cache_classes</span> = true</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">config.<span style="">action_controller</span>.<span style="">consider_all_requests_local</span> = false</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">config.<span style="">action_controller</span>.<span style="">perform_caching</span> = true</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">config.<span style="">action_view</span>.<span style="">cache_template_loading</span> = true </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's edit our database.yml file and add our stages (make sure to use your mysql user and pwd)</p>
<div class="igBar"><span id="lcode-43"><a href="#" onclick="javascript:showPlainTxt('code-43'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-43">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cat /dev/null&nbsp; &gt; config/database.<span style="">yml</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/database.<span style="">yml</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Paste in the following database info from the following <a href="http://blog.jeff-owens.com/database.yml">link</a> and save the file.  Now we need to add the setup file for production:</p>
<div class="igBar"><span id="lcode-44"><a href="#" onclick="javascript:showPlainTxt('code-44'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-44">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/deploy/production.<span style="">rb</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Paste in the following code and save in nano</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :rails_env, <span style="color:#CC0000;">"production"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :monit_group, <span style="color:#CC0000;">"factory"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :application, <span style="color:#CC0000;">"factory"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :domain, <span style="color:#CC0000;">"www.factory.com"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :server_name, <span style="color:#CC0000;">"www.factory.com"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :deploy_to, <span style="color:#CC0000;">"/var/www/apps/#{application}"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :db_name, <span style="color:#CC0000;">"factory_production"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :db_user, <span style="color:#CC0000;">'root'</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :db_passwd, <span style="color:#CC0000;">''</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">role :app, domain</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">role :web, domain</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">role :db,&nbsp; domain, :primary =&gt; true </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now we need to do the same for staging:</p>
<div class="igBar"><span id="lcode-45"><a href="#" onclick="javascript:showPlainTxt('code-45'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-45">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/deploy/staging.<span style="">rb</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Paste in the following code and save in nano</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :rails_env, <span style="color:#CC0000;">"staging"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :monit_group, <span style="color:#CC0000;">"qafactory"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :application, <span style="color:#CC0000;">"qa.factory"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :domain, <span style="color:#CC0000;">"qa.factory.com"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :server_name, <span style="color:#CC0000;">"qa.factory.com"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :deploy_to, <span style="color:#CC0000;">"/var/www/apps/#{application}"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :db_name, <span style="color:#CC0000;">"factory_staging"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :db_user, <span style="color:#CC0000;">'root'</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">set :db_passwd, <span style="color:#CC0000;">''</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">role :app, domain</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">role :web, domain</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">role :db,&nbsp; domain, :primary =&gt; true </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's setup our fake domain so that we can test our deployment.  Later we can replace a real domain in our staging.rb and production.rb files.</p>
<div class="igBar"><span id="lcode-46"><a href="#" onclick="javascript:showPlainTxt('code-46'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-46">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo nano /etc/hosts</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Add the following line to the bottom of your hosts file making sure to use the ip address of your server</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#800000;color:#800000;">10</span>.<span style="color:#800000;color:#800000;">39</span>.<span style="color:#800000;color:#800000;">121</span>.<span style="color:#800000;color:#800000;">200</span>&nbsp; &nbsp;qa.<span style="">factory</span>.<span style="">com</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#800000;color:#800000;">10</span>.<span style="color:#800000;color:#800000;">39</span>.<span style="color:#800000;color:#800000;">121</span>.<span style="color:#800000;color:#800000;">200</span>&nbsp; &nbsp;www.<span style="">factory</span>.<span style="">com</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>You can test it to see if our hosts file change worked by pinging our fake domains:</p>
<div class="igBar"><span id="lcode-47"><a href="#" onclick="javascript:showPlainTxt('code-47'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-47">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ping www.<span style="">factory</span>.<span style="">com</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ping qa.<span style="">factory</span>.<span style="">com</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>If you get your server's ip address we're good to go.  Now let's test some Capistrano stuff out.  You can see a list of the available Capistrano tasks by typing the following:</p>
<div class="igBar"><span id="lcode-48"><a href="#" onclick="javascript:showPlainTxt('code-48'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-48">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cap -T </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>We are first interested in setting up our staging and production websites folder structure on our linux server.  If we've setup things correctly so far the following commands will do that for us:</p>
<div class="igBar"><span id="lcode-49"><a href="#" onclick="javascript:showPlainTxt('code-49'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-49">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cap staging deploy:setup</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cap production deploy:setup </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's ssh back into our server and see if it worked:</p>
<div class="igBar"><span id="lcode-50"><a href="#" onclick="javascript:showPlainTxt('code-50'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-50">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ssh -p <span style="color:#800000;color:#800000;">8888</span> deploy@your_linux_box.<span style="">com</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cd /var/www/apps</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ls -la </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>You should see two folders, factory and qa.factory.  Now let's install mysql (note that you will be prompted to enter a new password for root):</p>
<div class="igBar"><span id="lcode-51"><a href="#" onclick="javascript:showPlainTxt('code-51'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-51">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Choose the top <span style="color:#006600; font-weight:bold;">&#40;</span>ruby<span style="color:#006600; font-weight:bold;">&#41;</span> option when prompted</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo apt-get install mysql-server-<span style="color:#800000;color:#800000;">5</span>.<span style="color:#800000;color:#800000;">0</span> mysql-client-<span style="color:#800000;color:#800000;">5</span>.<span style="color:#800000;color:#800000;">0</span> libmysqlclient15-dev libmysqlclient15off zlib1g-dev libmysql-ruby1.<span style="color:#800000;color:#800000;">8</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">#Install MySQL Native Bindings for performance gain</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql/bin/mysql_config </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Next add the following line to your bash profile located in ~/.bash_profile</p>
<div class="igBar"><span id="lcode-52"><a href="#" onclick="javascript:showPlainTxt('code-52'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-52">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano ~/.<span style="">bash_profile</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Add to the top of the file and save in nano</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">export RUBYOPT=rubygems</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Reload your profile</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">source ~/.<span style="">bash_profile</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>I like to manually create my databases and users in mysql, so let's add our databases for staging and production.  You'll need to come up with a password you want to use that is secure.  I'm just going to use 'password' for this example.</p>
<div class="igBar"><span id="lcode-53"><a href="#" onclick="javascript:showPlainTxt('code-53'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-53">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mysql -uroot -p</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">create database factory_staging default character set <span style="color:#CC0000;">'utf8'</span> default collate <span style="color:#CC0000;">'utf8_general_ci'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">create database factory_production default character set <span style="color:#CC0000;">'utf8'</span> default collate <span style="color:#CC0000;">'utf8_general_ci'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">grant all on factory_staging.* to <span style="color:#CC0000;">'factory'</span>@<span style="color:#CC0000;">'localhost'</span> identified by <span style="color:#CC0000;">'password'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">grant all on factory_production.* to <span style="color:#CC0000;">'factory'</span>@<span style="color:#CC0000;">'localhost'</span> identified by <span style="color:#CC0000;">'password'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># You can now see that your two databases were created by typing the following:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">show databases;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Type quit to get out of mysql:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">quit </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Exit out of the server.  Now we need to change our rails project's config/database.yml, config/deploy/staging.rb, and config/deploy/production.rb files to reflect the new mysql user name of 'factory' and your new password.</p>
<div class="igBar"><span id="lcode-54"><a href="#" onclick="javascript:showPlainTxt('code-54'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-54">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Change username and password for the following files and save</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/database.<span style="">yml</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/deploy/staging.<span style="">rb</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano config/deploy/production.<span style="">rb</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's add all of our rails code changes to subversion. You can see what files we need to add to subversion before we commit by typing the following:</p>
<div class="igBar"><span id="lcode-55"><a href="#" onclick="javascript:showPlainTxt('code-55'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-55">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">svn status </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The files with the '?' mark in front of them need to be added to subversion:</p>
<div class="igBar"><span id="lcode-56"><a href="#" onclick="javascript:showPlainTxt('code-56'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-56">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">svn add Capfile</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">svn add config/deploy</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">svn add config/deploy.<span style="">rb</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">svn add config/environments/staging.<span style="">rb</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">svn add app/views/layouts/maintenance.<span style="">html</span>.<span style="">erb</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's commit everything with a comment:</p>
<div class="igBar"><span id="lcode-57"><a href="#" onclick="javascript:showPlainTxt('code-57'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-57">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">svn commit -m <span style="color:#CC0000;">"Added files need for capistrano deployment"</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's add our widget tunnel definition to our server and setup ssh keys for our server.  Login to your server:</p>
<div class="igBar"><span id="lcode-58"><a href="#" onclick="javascript:showPlainTxt('code-58'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-58">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ssh -p <span style="color:#800000;color:#800000;">8888</span> deploy@your_linux_box.<span style="">com</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano ~/.<span style="">subversion</span>/config</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Add the following line inside the <span style="color:#006600; font-weight:bold;">&#91;</span>tunnels<span style="color:#006600; font-weight:bold;">&#93;</span> section and save</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">widgets = /usr/bin/ssh -p <span style="color:#800000;color:#800000;">8888</span> -l deploy</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Now generate ssh keys for our server</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ssh-keygen -t rsa -f ~/.<span style="">ssh</span>/id_rsa -C <span style="color:#CC0000;">"your@emailaddress.com"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Type the following and copy the entire string that is displayed</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cat ~/.<span style="">ssh</span>/id_rsa.<span style="">pub</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Now paste the string onto the second line of our authorized_keys file and save in nano</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">nano ~/.<span style="">ssh</span>/authorized_keys </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Exit out of the server.  Now let's try deploying our staging application to the server.  From the root of our factory application type the following:</p>
<div class="igBar"><span id="lcode-59"><a href="#" onclick="javascript:showPlainTxt('code-59'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-59">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cap staging deploy </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>You should see an error at the very bottom (/usr/sbin/monit: command not found).  That's o.k. because we haven't setup monit yet.  So go ahead and deploy production too:</p>
<div class="igBar"><span id="lcode-60"><a href="#" onclick="javascript:showPlainTxt('code-60'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-60">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cap production deploy </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now add our factory tables to our staging and production databases using database migrations:</p>
<div class="igBar"><span id="lcode-61"><a href="#" onclick="javascript:showPlainTxt('code-61'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-61">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cap staging deploy:migrate</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cap production deploy:migrate </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now let's ssh back into our server and change directories to our deployed websites:</p>
<div class="igBar"><span id="lcode-62"><a href="#" onclick="javascript:showPlainTxt('code-62'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-62">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ssh -p <span style="color:#800000;color:#800000;">8888</span> deploy@your_linux_box.<span style="">com</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cdapps</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">cd qa.<span style="">factory</span>/current</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"># Let<span style="color:#CC0000;">'s use the webrick webserver to test out application out</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0000;">script/server -e staging </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Now go to your browser on your Mac and type in http://qa.factory.com:3000.  Our widget listing page should show up if everything is working.  Now try creating a new widget!  To stop the webrick server you just use CTRL_C.  That's it for today.  Next time we will get nginx to run our applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jeff-owens.com/rails/full-rails-stack-part-four-capistrano/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
