Hear about how folks are running their web apps in production. We'll cover tech choices, why they chose them, lessons learned and more.
Podia Has Everything You Need to Sell Online Courses
In this episode of Running in Production, Jason Charnes goes over building a video course hosting platform. It’s built with Ruby on Rails and is hosted on Heroku. It’s been running in production since 2014.
Jason talks about using StimulusReflex / Action Cable, upgrading to Sidekiq Enterprise, writing tons of tests, setting up auto scaling on Heroku, tips to run zero down database migrations at scale, ways to reduce 3rd party API calls and more.
Topics Include
- 2:39 – Motivation for using Ruby on Rails (and yes Rails does scale!)
- 3:50 – Using interactors and Action Cable with StimulusReflex
- 6:06 – Things to think about for using Hotwire Turbo Streams vs other solutions
- 10:56 – Action Cable is embedded into the main web server
- 12:25 – The workflow gem and how payments are handled with Stripe and PayPal
- 16:15 – Recently upgrading to Sidekiq Enterprise and also using flipper for feature flags
- 19:40 – Using Knapsack Pro to help speed up tests in CI
- 21:18 – Code to test radio is about 1 to 1.5 and there’s about 38k lines of non-test code
- 24:03 – Examples of when they’re using Sidekiq’s batching feature
- 26:38 – Mostly using the asset pipeline but also using Webpacker and using StimulusJS
- 30:07 – Most developers at Podia touch most areas of the code base
- 31:37 – The run down on how the site editor works and using Trix plus Active Storage
- 34:41 – It’s 2021 and uploads still aren’t a fully solved problem
- 36:57 – Handling bulk video uploads from Podia to Wistia
- 38:38 – PostgreSQL is the main database, Docker isn’t being used and on-boarding new devs
- 40:53 – How they’re using Caddy and Let’s Encrypt to link custom domains to customers
- 42:48 – Using Postmark for transactional emails and SparkPost for email campaigns
- 44:18 – Full text search with PostgreSQL and building the Podia admin dashboard
- 47:38 – It’s hosted on Heroku and they use the Rails Autoscale add-on
- 49:43 – Surviving Black Friday without any problems
- 51:25 – The end to end process and time to deploy code from development to production
- 53:01 – Gems and strategies to help run database migrations at scale
- 56:44 – Using Diffend to audit gems and switching from Heroku’s scheduler to Sidekiq
- 1:01:42 – The DB is backed up on Heroku’s schedule and everything else is backed up too
- 1:03:21 – Avoiding tons of third party API calls by storing certain things locally
- 1:05:16 – Their payment code builds upon the official Ruby SDKs from Stripe and PayPal
- 1:06:11 – Using Uptime Robot, Cronitor, OpsGenie and Slack for monitoring and alerts
- 1:09:13 – Best tips? Build a friendly team of co-workers and automate as much as you can
- 1:11:03 – You can find Jason on Twitter at @jmcharnes
Links
📄 References- https://www.speedshop.co/blog/
- https://hotwire.dev/
- https://courses.jasoncharnes.com/stimulus-reflex
- https://gorails.com/episodes/how-to-use-cable-ready
- https://anycable.io/
- https://remoteruby.transistor.fm/113 (DHH on the Remote Ruby podcast)
- https://elements.heroku.com/addons/rails-autoscale
- https://github.com/contribsys/faktory
- rails →
- ruby →
- react →
- bootstrap →
- caddy →
- cronitor →
- heroku →
- jquery →
- lets-encrypt →
- metabase →
- opsgenie →
- paypal →
- postgres →
- postmark →
- redis →
- s3 →
- slack →
- spark-post →
- stripe →
- uptime-robot →
- wistia →
- https://github.com/collectiveidea/interactor
- https://github.com/hopsoft/stimulus_reflex
- https://github.com/hopsoft/cable_ready
- https://github.com/geekq/workflow
- https://github.com/mperham/sidekiq
- https://github.com/jnunemaker/flipper
- https://github.com/KnapsackPro/knapsack_pro-ruby
- https://stimulus.hotwire.dev/
- https://github.com/basecamp/trix
- https://github.com/Casecommons/pg_search
- https://github.com/ilyakatz/data-migrate
- https://github.com/ankane/strong_migrations
- https://diffend.io/
Support the Show
This episode does not have a sponsor and this podcast is a labor of love. If you want to support the show, the best way to do it is to purchase one of my courses or suggest one to a friend.
- Dive into Docker is a video course that takes you from not knowing what Docker is to being able to confidently use Docker and Docker Compose for your own apps. Long gone are the days of "but it works on my machine!". A bunch of follow along labs are included.
- Build a SAAS App with Flask is a video course where we build a real world SAAS app that accepts payments, has a custom admin, includes high test coverage and goes over how to implement and apply 50+ common web app features. There's over 20+ hours of video.