A few months back on went on a search for the next best e-commerce framework. Of course only open source will do and while I really like the Cartridge plugin for Mezzanine to say Cartridge is in it’s infancy is an understatement. But other than Satchmo (who’s ship seems to have sailed) there aren’t really any good options from the django side. You’re pretty much left rolling your own.
I wanted something pretty complete out of the box. Which meant basic product and cart functionality, Stripe integration for payments and (the kicker) USPS shipping integration. After some looking I found Spree and starting going to town. It has a ton of things going for it. It’s in Rails so it was somewhat new to me but I dove in anyway. Spree has a great development team but I found the setup to be very tricky. I would follow their install guide exactly and it wouldn’t work because module A in the requirements needed to be a very behind or ahead. It took a long while but I finally got a development Spree environment working on my macbook pro.
This is supposed to be a how to post. Damn.
Cutting to the end, even after getting a full production install up and running on Webfaction I could never get the database to stabilize after installing the active shipping extension. After setting that up (not easy with the lack of documentation - or at least stuff a rails noob could follow) I always ended up with database errors after adding products.
After that very frustrating experience I can understand why PHP based carts that work more out of the box dominate the open source e-commerce space.
On to the setup!!!
First: Create a Rails 3.2.13(nginx 1.4.1/Passenger 4.0.2/Ruby 2.0.0) application via the control panel (I’m going to call mine spree, and assign it to a website record.
Created a PostgreSQL database and make a note of the database name and password.
SSH into the server and run the following commands exactly as shown (and in this order):
cd ~/webapps/spree export PATH=$PWD/bin:$PATH export GEM_HOME=$PWD/gems export RUBYLIB=$PWD/lib gem install bundler gem install pg -- --with-pg-config=/usr/pgsql-9.1/bin/pg_config gem install spree_cmd rails new YOURAPPNAME cd YOURAPPNAME export RAILS_ENV=production
Set the production database credentials in config/database.yml as follows:
adapter: postgresql database: my_db_name host: localhost username: my_db_user password: my_db_password
Edit Gemfile to make the following changes/additions: Update the 3rd line to
gem 'rails', '3.2.14'
Add the following:
gem 'jquery-rails', gem 'pg' gem 'therubyracer' gem 'spree', '2.0.4'
bundle update rails
cd to the YOURAPPNAME directory and run:
bundle install spree install
Accepted the defaults after running “spree install”, then run:
cd to spree folder and edit nginx/conf/nginx.conf Change the second to last line that says root /home/ACCOUNTNAME/webapps/spree/hello_world/public; and change hello_world to spree Restart nginx to load the new config.
Fire up a browser and go view your awesome craftsmanship.