Tuesday, November 30, 2010

Pay attention to tiny annoying little files that don't exist.

I'm not sure if this will help anyone or not.  However, it's an interesting story so I thought I'd share. 
I've been working on project XYZ.com (named changed to protect the innocent) trying to stablize it for the owners because the morons who built it were ... well... morons.  (You can only work a project so long before you come to these type conclusions.  I am probably being a bit harsh.)  In any event, there is a couple parts of the application that makes heavy use of the session to manage dynamic search results. (remember that I'm coming back to it.)  This application current supports three out of the four major browsers (at least by my standards) IE, FF, and Safari and one browser (Chrome) had been turned off almost a year ago because it was "acting too flaky" and "not rendering images or pages properly" according to the owners.  As I've come to find out, actually all of the browsers behave a little flaky now and then but not as bad a Chrome which in some features of the app just refused to work.

So today I was trying to address another major flaw in the site.  The whole site is HTTPS (for no good reason except that Firefox "seemed to have issues with images in http") so I'm trying to at least make it somewhat intelligent on which protocol is used when.  Turns out this was no small feat with these monster size controllers that do everything.  (Did I mention this was a .Net MVC 1.0 application?)

So I decided that I should turn on Chrome to do some testing and I immediately got frustrated with the crapy results.  In fact, I was about to give up totally and disable it again when a bit of blind luck happened.  I was using the Visual Studio Debugger and  I had Fiddler open (as I often do now)  I actually noticed that Chrome was being freaky agressive about asking for the favicon.ico file.  I mean like freaky, every 3 or four requests it would ask again (like if that file is not there the first time it's going to somehow magically appear seconds later, and who really cares anyway?) and on top of it it was doing that (as it should) in a separate request.  The only problem was,  the file does not exist on this site. It never has. So the MVC framework (I think) or who the hell knows what because I haven't dug any deeper yet, was doing a redirect to "Index" which Chrome followed the redirect (on the file which is technically only suppose to be in one location) which caused app to serve up the home page.  This is where things started to get ugly.  This caused caused the  session data (did you remember?  it used heavily in a couple key places) to be wiped totally clean.  So when you try to create that user account or store your search results they vanish before your eyes!  Bingo!  Flaky results at random intervals!

Moral of the story... You must pay attention to tiny annoying little files that don't exist.

I love Fiddler... I love the debugger ...  the end.

Thursday, November 25, 2010

Capistrano deploy from Windows failing in transfer.rb

I recently ran into an issue with deploying from Windows using Capistrano.  The project I was using had been setup as a multi-staged deployment with Capistrano and had been working quite nicely deploying to my staging and production environments.  Unfortunately, the project sat for a few months and collected some dust while I was busy earning a living.  When I finally got around to working on it again I discovered that capistrano was now failing on the deploy command.  The error I was getting looked liked this:

C:/Ruby1.8.7/lib/ruby/gems/1.8/gems/capistrano-2.5.19/lib/capistrano/transfer.rb:156:in `[]=': undefined method `[]=' fo
r nil:NilClass (NoMethodError)
        from C:/Ruby1.8.7/lib/ruby/gems/1.8/gems/capistrano-2.5.19/lib/capistrano/transfer.rb:207:in `handle_error'
        from C:/Ruby1.8.7/lib/ruby/gems/1.8/gems/capistrano-2.5.19/lib/capistrano/transfer.rb:48:in `process!'
        from C:/Ruby1.8.7/lib/ruby/gems/1.8/gems/capistrano-2.5.19/lib/capistrano/transfer.rb:43:in `loop'

Although not completely obvious, the clue to the failure is in the location of the failure.  Failed in capistrano in transfer.rb and it's failing there because tar didn't execute and therefore didn't create the archive file to transfer to the server.

I truly love that when capistrano runs it identifies each command it's going to execute so you can see what it's trying to do.  I'm sure it would have been a much longer trouble shooting session if I had to dig through source to figure that out instead of it just telling me.  When I received that error, knowing that it was working fine a few months ago, it was obvious to me that I had made some changes to my environment that introduced the problem.  As it turns out, I was missing unix utilities in my PATH and in particular I was missing tar.  Once I added a path to my Cygwin/bin folder to my PATH everything started working again. 

Hope this helps someone avoid a few minutes of trouble shooting.

Saturday, November 6, 2010

Upgrade Windows 2008 Standard to 2008 Enterprise

I've recently needed to upgrade Windows Server 2008 Standard Edition to Server 2008 Enterprise Edition to take advantage of additional memory on the server. I'm running the 32 bit version OS not the 64 bit. The 32 bit of Windows 2008 Standard only supports up to 4 GB of memory but the Enterprise Edition will handle up to 64 GB. (memory limits MSDN)  All the documentation I could find (blog posts, MSDN, TechEd, etc) suggested that the upgrade could be done in place but that there were some considerations depending on certain roles the server plays.  Fortunately my server didn't fall into any of those special circumstances.  However, when I ran the install and selected Enterprise Edition I received the message:

"Upgrade has been disabled.
The upgrade can not be started.  To upgrade, cancel the installation and then choose to upgrade to a version of Windows that is more recent than the version you are currently running."

and the button I would use to perform the upgrade in place was disabled.  Naturally I was a bit confused since my current installation was Windows 2008 Standard Edition SP2 and I'm trying to upgrade from Enterprise Edition 2008 SP2.

After a bit more digging on Google I found this blog post (Thanks Network Steve) that suggested that maybe SP2 was the issue causing the button to be disabled. So, not feeling very good about this approach, but with no other real options, I decided to go for it.  After making all the necessary backups I uninstalled the service pack. Yes, the OS still booted and seemed to work and fortunately for me this actually solved the issue with the installer.  I was able to do the upgrade in place from Standard to Enterprise Edition.

Hope this helps someone else!

Friday, October 8, 2010

Install MySQL 5.1 for Development and Enable remote connections


I keep getting tripped up by this each time I install MySQL so I thought I would post this as a reminder to myself with the hopes it may help someone else out too.   I have probably setup and installed MySQL on Ubuntu at least 5 or 6 times in the past 2 years.  Each time I think wow how easy and each time I get stuck when it comes to remotely accessing the MySQL instance.  In my production environment this hasn't hit me because I have MySQL on the same VM as my application and only allow local connections.  However, in my development environment I don't want that restriction. So naturally, when faced with an information problem,  I use a search engine and try looking for this information. Inevitably I either find the posts that show how to change the configuration of the service OR I find the posts showing how to adjust the user privileges but I never seem to find a combination post.  Here's my combo post.

Installing MySQL on Ubuntu

sudo apt-get update
sudo apt-get upgrade --show-upgraded

sudo apt-get install mysql-server
Other things you might want to consider I have found useful in this Linode.com post on setting up MySQL on a VM from their service. (which I have and think it's awesome)

Enabling some security

sudo mysql_secure_installation 
When running this utility you will be given an option to allow root "remote" access which I would think you should ONLY do in a secure environment if you know what your doing.  Have you heard that before?  You probably also heard the speech about setting a good root password, so I'll spare that one for you and just say I would if I were you.

Allow remote connections
Now to make sure that your user connections can actually connect you need to actually grant the users privileges.  That looks something like this in my case.

grant all privileges on *.* to 'devuser'@'192.168.1.%' identified by "CHANGEME";

If you don't understand what this does you should probably due some reading.The % character can be used in any portion of the address or even as the user name.  Refer to the MySQL 5.1 Access Control - Connection Verification section of the docs for MySQL.  (If you don't understand why I used 192.168.1.% then I can't help you.)

This should get you up and running and connecting remotely.

Linode Reference Library
MySQL 5.1 Access Control - Connection Verification
A useful post with some firewall notes too

Thursday, September 30, 2010

File level encryption prevented rendering of image file on IIS 7.

I was recently deploying an application to a staging environment.  The application had been tested on several development workstations and everything appeared to be fine.  This of course is the "typical" developer story and it is why staging environments are so crucial to successful deployments.  Once the application was in staging I proceeded to make a few cursory checks of the new things that would be tested by the people doing QA.  That's when I noticed that the new buttons on a page were not rendering. As it turns out, the images for the buttons were actually set for file level encryption.  Once I turned off the encryption the buttons were rendered in the view.  So if you have magically missing buttons on your web pages under IIS 7 have a look at the attributes for the file.  Another clue to the issue came when I looked at the folder containing the images files.  The two buttons that were not rendering both were listed (I use the details list quite often) in green color font which made them stand out in the list against the rest being black.

If you need to remove file level encryption all you have to do (assuming you have permissions to modify the file) is right click on the file then choose properties.  When the dialog is displayed clicked the Advance button and then un-check the option "Compress contents to save disk space".

Thursday, September 16, 2010

VMWare increase disk size not showing in OS

I recently purchased a new Dell T410 Server so that I can run VMWare Server 2.0 and get a handle on the configuration nightmare that is my virtual machine configurations.  So far I am loving the new server and VMWare Server 2.0.   I have been using Microsoft Virtual Server and Parallels Workstation 2.2 to manage all the VM's where I do a majority of my consulting work.  Using VM's allows me to partition my work effectively.  Unfortunately, it's killing my laptop and desktop to keep managing these things this way.  Enter stage left, my new Server.

So as usual, I decided to setup some "template" VM's to make it easier to get started on new things.  Unfortunately, I made my Windows 2008 Server VM with the default VMWare Server hard disk size of 16GB which I almost immediately had to change.  That's when I ran into a bit of an issue.  In fact, it was my issue and not VMWare Server.  When you increase the size of your disk(s) on a VMWare virtual machine it works like magic.  You can do this from inside the VMWare Server Infrastructure Web Access web interface as long as your virtual machine is powered off. Simply select your virtual machine from the inventory list on the left and then click on the tiny drop down arrow on the disk in the center view.  This will produce a small menu of choices one of which is Edit.  Note: You will see your capacity and if (and only if) your virtual machine is powered off, you will be able to change the disk capacity.  Once you change the size it is reflected in the web interface immediately.  I thought to myself at the time "that was easy".  When I powered up the virtual instance and checked the size of the disk it still reflected the old size of 16GB.  Then I thought, I wonder what's wrong?   I am not entirely sure why I thought that the OS would recognize the newly available un-partitioned space.  Naturally, it doesn't.  You basically have to go into your disk management software and tell it to use the space.  On Windows 2008 you can go into Settings --> Control Panel --> Administrative Tools and then choose "Share and Storage Management". Once you're there you can select the "Volumes" tab and then select your drive from the list. At this point you have one of two options.  You can Extend your existing drive or you can Provision Storage.  I choose to extend my existing C: drive.

I hope this helps someone avoid a few minutes of confusion.

Tuesday, August 17, 2010

Testing SharePoint outgoing email with Papercut

I found a very cool utility this week that has saved me some precious time.  I'm working on a SharePoint 2007 project running on Windows 2003 Server and I needed to adjust a feature of the application to send some confirmation emails.  My first inclination was to setup an SMTP server for testing.   As usual, I started with a search on Google and fortunately for me I accidentally stumbled across Papercut as an alternative to doing my email testing.  No need to setup an SMTP server.  No need to constantly jump into my email and check for the confirmation.  For those times when you do need to see the email in an email client (when you need to check HTML rendering) you can forward captured emails.

Wednesday, August 11, 2010

Fiddle me this Batman!

I've been working in Internet Explorer land lately.  This is primarily due to contract work on a SharePoint project where the client really only cares about IE working well. (at least for now)   So for all of you Firefox users out there who (like me) are use to have Firebug at your finger tips it can be a little mind numbing to be without a way to see the HTTP traffic in all it's glory.  That's where Fiddler comes in to play!  In fact, it might just replace Firebug altogether for me.  I like the stand alone process approach.  So far Fiddler is footing the bill.  If you're looking for a good Web debugging Proxy that is free then you should give it a try.


Monday, August 9, 2010

SQL Server 2005, self signed SSL certificates, issue from SelfSSL

I was working on a project today and ran across a painful delay.  I have Windows 2003 Server with Microsoft SharePoint 2007, SQL Server 2005, and IIS 6.0.   I was finally to the point (actually long past it) where I should have setup SSL for some testing.  Naturally I hit the search engines to find the easiest way to setup a self signed certificate under IIS.  That is when I ran across this post on SelfSSL which is part of the IIS 6.0 Resource Kit Tools.  Unfortunately, that's where my trouble began.  I followed the instructions installing just SelfSSL and the log analyzer tool.   Then I proceeded to use the SelfSSL to create certificates for my SharePoint site(s).  Installing the certificates using the tool was painless.  No errors, it just went smoothly.  I have form based authentication and I was able to connect via SSL but something weird was happening with AD site and it was preventing me from actually working.  Since I couldn't afford to be delayed on some of this work I decided to revert the system back to non-SSL state and keep working figuring that I would get back to this when I had more time to spare on solving whatever issue was keeping things from truly working.  That's when all the fun began.   I removed the certificates using IIS manager and then restarted the server thinking I'll get a clean start to ensure it would be working again.  I was indeed wrong.   When the system came back up I wasn't able to connect to the SQL Server instance.

The first indication came from my SharePoint AD site with the message
"Cannot connect to the configuration database."

I received a slightly different (and much longer) message from try to connect using SQL Server Management Studio.  Here's the important parts.

"error occurred during the pre-login handshake ... No process is on the other end of pipe"

Naturally I was confused as to why uninstalling SSL certificates would affect my SQL Server connection but it did.  As it turns out, SQL Server uses a certificate to encrypt the login information even if your not going to use a secure connection. In the absences of an assigned certificate SQL server will create a self signed server certificate to use.  Unfortunately, if there are certificates available then SQL Server will "apparently" grab a certificate to use providing it meets certain criteria which apparently my discarded SelfSSL certificates did.  After reading numerous posts to understand what was happening I was able to clean it up on my system.  See below for some of the more useful posts I found on this topic.  

What must I do to fix this?
Make sure you have the same problem.  Apparently there are a few ways to get these same error messages from SQL Server so unless you have recently installed or un-installed self signed certificates on IIS where IIS is on the same box as SQL Server 2005 you might find this fix won't do anything for you.

Even though I used IIS Manager to remove the certificates there were still around on the system and SQL Sever was still finding them.  So, I basically did the following:

1. Click the Windows Start button and ran MMC to get the Microsoft Management Console.
2. Choose File --> Add / Remove Snap-in...  from the main menu.
3. Click the "Add" button on the Standalone tab.
4. Choose "Certificates" and click the Add button.
5. Choose "Computer account" and click the Next button.
6. Choose "Local computer" radio button and clicked Finish.
7. Click the "Close" and "OK" buttons on the previous two dialogs.
8. In the list I navigated to "Certificates (local computer) -> Personal -> Certificates"

NOTE: Your self signed certificates might be some place else but they're most likely here.

CAUTION: Be sure you SELECT the right certificates in the next step!!!
9. Click on certificates to select them and use the option to delete. BE SURE TO get the self signed ones.  There could be others here!!!

After I did this my SQL Server 2005 instance was all good again. I was able to connect.  

Hopefully find this post helpful and it save you some of the 2 hours I lost on this little expedition.

www.learnsqlserver.com - Force SQL Server to use particular certificate (SSL)
social.msdn.microsoft.com/forums - post on SSL certificate
www.eggheadcafe.com - error on pre-login handshake
blogs.msdn.com - no process is on the other end of pipe - bad certificate

Friday, July 16, 2010

RMagicK, SQLite3, MySQL - Gem setup on Ubuntu 9.10 Karmic

Recently I needed to setup what I think are common gems, for many Ruby on Rails, users on the Ubuntu 9.10 VM I use for development.  I thought I'd document these in one place since I had to go to several places to find the information I needed.

sudo apt-get install libmysqlclient-dev 
sudo gem install mysql --no-ri --no-rdoc

sudo apt-get install libsqlite3-dev 
sudo gem install sqlite3-ruby --no-ri --no-rdoc

sudo apt-get install imagemagick
sudo apt-get install libmagick9-dev
sudo gem install rmagick --no-ri --no-rdoc


Thursday, July 15, 2010

SIOCSIFADDR : Parallels VM Clone : Ubuntu 9.10 Karmic

I just recently set up a development environment for Rails on Ubuntu 9.10 so that I could move towards using Apache and Passenger which would more closely resemble my production environment.  After installing Ubuntu on a VM under Parallels Workstation 2.2 build 2222 I decided to clone that VM before configuring Apache and Passenger to match my production environment.  That's when I ran into a little snag.  After creating the clone of the fresh Ubuntu install I noticed that I didn't have a network connection.  Unfortunately everything seemed fine until I tried to install the Rails gem and it complained.

Upon further investigation I noticed that the network interface was down.  I tried running:

"sudo /etc/init.d/networking restart"

This displayed the error "SIOCSIFADDR: No such device" referencing eth0.

(This of course means no network connection which in turns makes it bit more challenging to install the gems needed for my Rails applications.)  In any event, I was able to locate several posts (see a couple references below)  that ultimately lead me to a solution.  It turns out that the clone has a new MAC address (as it should) and Ubuntu (or at least some part of it) was keeping track of what MAC address belongs to each interface. When I first had this problem I tried running "ifconfig" to see what was going on.  The only thing showing was the loopback connection. 

One of the posts I read suggested running "ifconfig -a" which actually shows all interfaces (up or down) and this tipped me towards the real problem.

   NOTE: I'll be using the -a forever now.  No point in seeing just half the picture.

These posts also suggested that a file located in the folder /etc/udev/rules.d contains the persistence rules for the network interface.  In my case that file was a file named "70-persistent-net.rules".   I removed that file, restarted the VM, and the problem was solved!  That file was re-created with the correct MAC address for eth0.  I suppose you could manually edit the file to contain the correct MAC address for eth0 and remove the eth1 entry but I didn't try it since the file is automatically created. 

I hope this helps someone!


Monday, May 3, 2010

Many options for a virtual phone number

Need another phone number?  Most people would answer no but recently I had to say yes to that question.  I needed a number that could reach me wherever I was but that I could occasionally forward to someone else to handle inbound technical calls.  I didn't want to use my cell number or my business line because I wanted to keep those calls coming to me or going to voice mail.  I needed a virtual phone number.  In looking around a bit I was surprised to find so many options.  Here's a short list (in no particular order) of the ones I kept past the initial Google search.

Google Voice

A friend of mine had Google voice so I asked him for an invite so I could try it out.  That's the end of the story.  Google Voice fit my need perfectly.  In fact, it's totally awesome and currently free unlike the other services listed above.

Tuesday, April 6, 2010

The future direction of programming languages?

A friend of mine pointed me to this great post of a technical session presented by Anders Hejlsberg at TechDays 2010.  I my opinion this is the guy that changed Microsoft's tools direction dramatically when he left Borland for Microsoft.  At that time he was "the guy" responsible for much of the success of Borland who was at that time a clear winner in the developer tools race. (again, my opinion)

TechDays 2010 - Developer Keynote by Anders Hejlsberg

The keynote is about trends in the future direction of programming languages.  His overview of imperative, declarative and functional programming is very good and he also dives into Static vs. Dynamic programming languages and spins a future where these two approaches are melted together.  All in all I found the entire session worth watching.  Enjoy!

Friday, February 5, 2010

Getting started with Money and Act_As_Money

I consider myself still fairly new to Rails after about a year of learning and I still seem to get caught up on some things that I shouldn't.  I'm working on an application that needs to care about money to some extent and I was hoping to avoid the pain of dealing with floating point issues.  I've been there numerous times in the past and it is never enjoyable and sometimes results in embarrassing situations as you try to explain why somethings don't add up correctly or compare well.  These experiences have me leaning towards storing money as integer values in the database and working with them as pennies. So I was happy to see someone has already done most of the work in Ruby and there is a nice plug-in for Rails to simplify the code in the model.

If you're dealing with money in your Rails application the first thing you'll need is the Money gem and then you'll likely want the act_as_money plug-in.  It seems that most things in the Ruby and Rails communities these days have forked all over God's green earth and it is often a challenge trying to figure out what I should use.  (Am I the only one seeing and thinking this?)  I dug for an hour or so and read through numerous posts before making my decision.  Because I'm using Ruby 1.8.7 and Rails 2.3.5, I decided to go with the original Money gem (currently 2.1.5 updated November 2009) instead of the collectiveidea Money gem.   For those of you with Rails 2.1 or earlier you might want to consider using the collectiveidea-money gem as it appears from my reading that you'll have more success there. It's that or bite the bullet and move to a more recent version of Rails.  I also opted to use the act_as_money plug-in from collectiveidea (updated 11-19-2008).  Again, for anyone on Rails 2.1 you will want to pull that plug-in from the repository using the 2.1 tag.

The play by play
  • First install the Money gem.
gem install money

  • Then from inside your Rails project install the act_as_money plug-in
script/plugin install git://github.com/collectiveidea/acts_as_money.git
  • The next thing you'll want to do is create a migration if your existing models with non-integer money values.  In my case I was using decimal instead of integer.
  • def self.up
          change_column(:invoice_items, :rate, :integer)
          change_column(:invoice_items, :amount, :integer)
          change_column(:invoices, :taxable_amount, :integer)
          change_column(:invoices, :non_taxable_amount, :integer)
          change_column(:invoices, :taxes, :integer)
          change_column(:invoices, :total, :integer)
          rename_column(:invoice_items, :rate, :rate_in_cents)
          rename_column(:invoice_items, :amount, :amount_in_cents)
          rename_column(:invoices, :taxable_amount, :taxable_amount_in_cents )
          rename_column(:invoices, :non_taxable_amount,:non_taxable_amount_in_cents )
          rename_column(:invoices, :taxes, :taxes_in_cents)
          rename_column(:invoices, :total, :total_in_cents)
  • Here are a couple methods I used in my migration to covert the data in the columns being changed.
  • class ModifyMoneyFields < ActiveRecord::Migration
      def ModifyMoneyFields::fixDollarsToCents(model, fields)
          records = model.find(:all)
          records.each do |rec|
              fields.each do |field|
                  d = rec.send(field)
                  d = d * 100
      def ModifyMoneyFields::fixCentsToDollars(model, fields)
          records = model.find(:all)
          records.each do |rec|
              fields.each do |field|
                  d = rec.send(field)
                  d = d / 100.0
      def self.up
          fixDollarsToCents(Invoice, [:taxable_amount, :non_taxable_amount, :taxes, :total])
          fixDollarsToCents(InvoiceItem, [:rate, :amount])
  • After creating your migrations you'll want to adjust your models.  The plug-in will make this easy to do. In fact, it's easier than most of the posts show if you named your column with a suffix of "_in_cents" as shown in the previous step.  The "_in_cents" is the default assumed by the plug-in when using the composed_of method for creating the Money object.
  • class Invoice < Blameable
        belongs_to :term
        has_many :invoice_items
        # Note: The :currency => false means NO currency field in the model, if not supplied the plugin defaults to US dollars and you need a field in your model
        # Note: You can also provide :cents => :total_pennies if you opted for different field names
        money :taxable_amount, :currency => false
        money :non_taxable_amount, :currency => false
        money :taxes, :currency => false
        money :total, :currency => false
  • Finally, run your migration.

    rake db:migrate
    Something that tripped me up for a few minutes...

    In some of my validation code for the models I was comparing the "new" Money fields to a fixed number such as:
    def validate
         if rate == 0
            errors.add(:rate, "must not be zero.")
    This caused my code to freak out tossing the following exception:

    undefined method `cents' for 0:Fixnum
    C:/Ruby1.8.7/lib/ruby/gems/1.8/gems/money-2.1.5/lib/money/money.rb:92:in `=='

    To fix this just change your code to:
    def validate
         if rate == 0.to_money
            errors.add(:rate, "must not be zero.")
    The Money gem has core extensions for Number and String which adds the to_money() method.

    Once I decided to make the switch I was able to make changes related 22 fields and 14 models in about 1 hour.  All my model tests confirmed things were working correctly.  Hopefully you found this helpful. Good luck!

    The documentation for the Money gem
    The Act_As_Money plugin
    post on act_as_money
    An good simple post on composed_of also referencing Money and act_as_money

      Monday, January 4, 2010

      Spree rake db:bootstrap issue - stack level too deep

      Ever had just a couple of minutes you wanted to burn and look at something new?  I did today and was hoping to have a quick look at Spree.  It's a Ruby on Rails e-commerce solution for developers to use in building e-commerce applications.  I ran across it last year and quickly passed it by as not having enough of what I needed at the time.  I'm back full circle looking at Spree again for an upcoming project and I decided it's come far enough that I'd look under the hood.  That's when my couple of minutes ran out quickly.  I'd like to say it's because I was doing something wrong or in someway caused the issue myself.  I'd like to say it's because I looked at Spree and just couldn't put it down because I liked it so much.  Unfortunately neither is true.

      I'm running Rails 2.3.5 under Ruby 1.8.7 on Windows XP Pro.  Please, no cracks about Windows being my development environment and how that is wrong.  I had to wade through enough of those postings from over zealous Linux developers before I found some information I could use to solve the problem before me.

      I was following the Spree Guide - "Getting Started with Spree" in the hopes I would accelerate my quick look. When I ran the rake db:bootstrap command I received and error.

      "stack level too deep"

      It appears that Spree has a dependency on a gem called jeweler which has a side affect dependency on Git.  It just so happens I have Git installed (use it all the time now) but I hadn't created a repository out of the "mystore" project (since I was just looking) so it was failing.  My quick way around the error was to just initialize a Git repository for this project.  If you don't have Git installed you might as well do that now.  It will save you time if you've decided to stay in the Ruby on Rails community.

      After I got passed the "stack level too deep" I had to install a few more gems and then I hit another error.

      "undefined method 'av_template_class' for Haml::Util:Module"

      I didn't have Haml installed before I installed Spree.  It came along as a dependency.  Turns out the dependency has an issue.  If you hit this error Haml 2.2.16 isn't going to work for you so you'll need to downgrade the gem to 2.2.15.

      gem uninstall haml
      gem install haml -v 2.2.15

      That should get you up and running on Spree 0.9.4 on Windows XP under Rails 2.3.5