Stripe's [Rails Checkout Guide] assumes you already have a Ruby on Rails app and want to add Stripe for payment processing.
I didn't, so here's how I started a new Rails app from scratch and added a simple Stripe Checkout button to accept payments.
First things first: create a new Rails app called
rcapp and put it under version control:
$ rails new rcapp $ cd rcapp $ git init $ git add . $ git commit -m "Initial commit of new Rails app for Stripe Checkout"
(Your commands will be different if you're using a different version control system, or adding it to an existing repository. The important thing is to put it under version control SOMEWHERE.)
Next, add the
stripe gem to your application's Gemfile
$ bundle install
If the stripe gem was not already installed, you'll see something like this in the output:
Using sqlite3 1.3.9 Installing stripe 1.15.0 <- Using turbolinks 2.4.0 Using uglifier 2.5.3 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Note that the Stripe guide I linked to earlier suggests pointing directly at the github project. TODO: figure out if this is like using SNAPSHOTs that auto-update to the latest bleeding-edge code in the repository.
Now add the modified files and commit your changes:
$ git add Gemfile $ git add Gemfile.lock $ git commit -m "Add stripe gem to Gemfile"
From this point on, I will stop reminding you to commit your changes. You should do it. :)
Generate a controller for Charges
$ rails g controller charges
and this happens:
Paste the content from the Stripe tutorial into charges_controller.rb or see [the file in my github repo].
config/routes.rb as described or see -github link-.
Now you can run
rake routes to see what that did:
$ rake routes Prefix Verb URI Pattern Controller#Action charges GET /charges(.:format) charges#index POST /charges(.:format) charges#create new_charge GET /charges/new(.:format) charges#new edit_charge GET /charges/:id/edit(.:format) charges#edit charge GET /charges/:id(.:format) charges#show PATCH /charges/:id(.:format) charges#update PUT /charges/:id(.:format) charges#update DELETE /charges/:id(.:format) charges#destroy
Once more with
config/initializers/stripe.rb Note that I use environment variables prefixed with STRIPE_ here and below to launch the app.
app/views/layouts/charges.html.erb at https://stripe.com/docs/checkout/guides/rails#views
Now launch the app. (At this point if you're going to do more development, it's worth adding those keys to your ~/.bash_profile so you don't have to specify them on the command line every time.)
$ STRIPE_PUBLISHABLE_KEY=pk_foo STRIPE_SECRET_KEY=sk_bar rails s
And visit (this is important!) http://localhost:3000/charges/new
If you just visit http://localhost:3000 you will get the default home page with no mention of your checkout button.
The entire app is available here: https://github.com/wsmoak/stripe/tree/master/ruby/rcapp
The Stripe tutorial then goes on to imply that this app can be trivially launched on Heroku.
Actually, that is not true, because a default Rails app uses Sqlite3, which Heroku does not support. Use Postgres instead and it will work.