With this blog post, we will be taking Dave Haeffner's The-Internet, https://the-internet.herokuapp.com/, a ten-year old web app test site, fork it, investigate using Google AI how to modernize the server architecture, and port it over to a new home at Render.com.
- Spoilers: The original version, but with updated Ruby architecture: https://the-internet-8uaj.onrender.com/ (takes a minute to spin up the environment)
It finally happened. Dave Haefner's The-Internet, a test site I have been using ever since I first started blogging, is now failing to load half the time. It's not the test site's fault. It's Heroku.
Heroku, a Platform-as-a-Service site, allowed developers to get web applications up and running very quickly, where they could experiment with the very popular free tier, before switching to one of their paid plans. But according to Gaurav Kheterpal, in his article, The Rise, Decline and Free Fall of Heroku — A Tale of What Could Have Been! (2/2026) Salesforce, which has owned the since 2011, decided to do away with the free tier four years ago. Things started going downhill. Since February 2026, Heroku is no longer going to be offered to new customers, according to Heroku's update, and it is now in maintenance mode.
So I had to come to a decision:
- Do I pick a new test website to blog against... or do I figure out how to resurrect the old one?
- Source code for the site, https://github.com/saucelabs/the-internet, is under an Apache-2.0 and MIT License, with Sauce Labs encouraging people to update and change it. Could I figure out how to update it, modernize it, and find it a new home?
Step 1: Copy the Source Code
Dave Haeffner developed the test site The-Internet when he was published the weekly newsletter Elemental Selenium (2013) and his Selenium Guidebook (2014). I remember reading both religiously when I was taking Alan Richardson's ( @eviltester ) online Selenium + Java course, coding against Dave's website, trying to figure out how to make the shift from manual testing to automation development.
Now, the source code for The-Internet is maintained by Sauce Labs, living in their GitHub code repository.
... And that source code? Sauce Labs has placed it under a Apache-2.0 and MIT License.
- Apache-2.0: The Apache Software Foundation (apache.org), founded in 1999 by the Apache HTTP Server ("a patchy server") , put forth the 2nd version of their software license in 2004. [See License]. It allows users to use the software for any purpose, to distribute it, to modify it, and to distribute modified versions of the software under the terms of the license, without concern for royalties.
- MIT License: According to the MIT Licensing Office article, Exploring the MIT Open Source License: A Comprehensive Guide, "grants permission to use, modify, and distribute the software, with the condition that the original copyright notice and the license text are retained in the redistributed software. This ensures proper attribution to the original authors while offering maximum freedom for developers".
- Log into your GitHub account.
- Go to https://github.com/saucelabs/the-internet
- Select the [FORK] button in the top left of the repo.
- Select yourself as the new code owner.
I opened up Google.com, switched to AI mode, and started examining the Gemfile, the configuration file of the Ruby project that lists all external libraries and frameworks (dependencies), version numbers of the product, and whether to download these files from RubyGems.org, or another source.
Step 2: Review Gemfile with Google AI
Copying and pasting the Gemfile into Google AI, it had the following recommendations:
Change Default branch: MASTER -> MAIN
GitHub, back in 2020, changed the standard name of their default branches from "master" to "main". The code in the-internet is so old, the change hasn't yet been done in the original code. So in my copy:
- Change MASTER to MAIN: git branch -m master main
- Select "Sync Fork" to update the branch. You can see that "main" is the most updated branch.
- Go to GitHub Settings --> Default Branch and switch it from "master" to "main".
Gemfile Updates
With the original The-Internet it used:
- source 'https://rubygems.org'
- ruby '2.7.2'
- gem sinatra, sinatra-flash, sinatra-contrib, shotgun, zurb-foundation, compass, rake, pony, faker, uuid
- For group :test, use gem 'selenium-webdriver', '~> 3.4.0', gem 'rspec', '~> 3.5.0', gem 'sauce_whisk', '~> 0.1.0'
According to Google AI:
- Replace gem 'shotgun' with gem 'rerun': "Shotgun relies on an aggressive forking mechanism that is completely broken and unmaintained on Ruby 3.x+. Replacing it with the rerun gem in your development group gives you seamless code reloading without the crashes".
- Remove gem 'compass': "The Compass framework was officially deprecated years ago and does not support modern Sass compilation or modern versions of Ruby"
- Remove gem 'uuid': "This gem is redundant. Modern Ruby provides cryptographically secure UUID generation out of the box in its standard library. You can safely delete this gem and use SecureRandom.uuid in your application without requiring any external packages".
Google AI also suggested that I upgrade the test environment locks:
- selenium-webdriver ~> "3.4.0 is severely outdated and will fail to communicate with modern versions of Chrome, Firefox, and Safari. Moving to ~> 4.0 is required".
- rspec ~> "3.5.0 will throw a massive amount of keyword argument deprecation warnings on Ruby 3.2. Upgrading to ~> 3.13 ensures smooth, clean test outputs".
Google AI also mentioned: "Both Shotgun and Rerun are Ruby gems designed to solve the exact same headache: automatically reloading your application when you make changes to your code during development. Rerun is a highly efficient filesystem watcher.
"How it works: Instead of doing anything fancy inside the Ruby process itself, Rerun simply sits in your terminal and watches the folder you are working in. The moment you save a file (like a .rb, .erb, or .json file), Rerun intercepts the change, uses standard Unix signals (SIGINT/SIGKILL) to cleanly kill your web server, and immediately boots it back up in a fraction of a second". [Ubunto Man Pages / Rerun].
Good to know!
After a lot of back and forth with Google AI, having it explain its findings, my updated Gemfile looked like:
- source 'https://rubygems.org'
- ruby '~> 3.4.2'
- gem sinatra, sinatra-flash, sinatra-contrib, shotgun, rackup, rake, pony, faker, puma
- For group :development, use gem 'rerun'.
- For group :test, use gem 'selenium-webdriver', '~> 4.0', gem 'rspec', '~> 3.13', gem 'sauce_whisk', '~> 0.3'
About These RubyGems:
sinatra:- First Release: September 9, 2007.
- Last Updated: October 10, 2025 (v4.2.1)
- Creator: Blake Mizerany.
- Sinatra is a lightweight, minimalist web application framework written in Ruby. It provides a simple domain-specific language (DSL) to quickly create web applications with minimal effort, mapping incoming HTTP requests directly to Ruby code blocks.
- Official Docs: https://sinatrarb.com/
- RubyGems.org: https://rubygems.org/gems/sinatra
sinatra-flash
- First Release: April 26, 2010 (v0.1.0)
- Last Updated: May 2, 2010 (v0.3.0)
- Creator: Stephen Eley
- A Sinatra extension for Rails-style flash messages. It supports hash operations on the flash and a
styled_flashview helper that renders messages with CSS classes. Works only in Sinatra. - Official Docs: http://github.com/SFEley/sinatra-flash
- RubyGems.org: https://rubygems.org/gems/sinatra-flash
sinatra-contrib
- First Release: October 1, 2011
- Last Updated: October 10, 2025 (v4.2.1)
- A collection of semi-officially supported Sinatra extensions, such as
config_file,namespace,content_for, andtest_helpers. - Official Docs: https://rubydoc.info/gems/sinatra-contrib
- RubyGems.org: https://rubygems.org/gems/sinatra-contrib
shotgun
- First Release: February 20, 2009 (v0.1)
- Last Updated: September 10, 2016 (v0.9.2)
- Creator: Ryan Tomayko
- A reloading development server for Rack applications. It loads the app fresh for each request, so code changes appear without a restart.
- RubyGems.org: https://rubygems.org/gems/shotgun
rackup
- Last Updated: December 5, 2025 (v2.3.1).
- A general server command for running Rack applications.
- Official Docs: https://github.com/rack/rackup
- RubyGems.org: https://rubygems.org/gems/rackup
rake
- Last Updated: April 16, 2026 (v13.4.2)
- A Make-like build tool in Ruby. Tasks and dependencies are written in plain Ruby syntax in a Rakefile.
- Official Docs: https://github.com/ruby/rake
- RubyGems.org: https://rubygems.org/gems/rake
pony
- First Release: October 29, 2008 (v0.1)
- Last Updated: April 18, 2019 (v1.13.1)
- Creator: Adam Wiggins.
- A small gem for sending email in one call, for example
Pony.mail(:to => ..., :body => ...). It depends on themailgem. - RubyGems.org: https://rubygems.org/gems/pony
faker
- First Release: November 22, 2007 (v0.1.0)
- Last Updated: April 16, 2026 (v3.8.0)
- Creator: Benjamin Curtis
- A port of Perl’s Data::Faker that generates fake names, addresses, phone numbers, and similar test data.
- Official Docs: https://github.com/faker-ruby/faker
- RubyGems.org: https://rubygems.org/gems/faker
puma
- First Release: October 25, 2011
- Last Updated: May 26, 2026 (v8.0.2).
- Creator: Evan Phoenix
- An open source multi-threaded HTTP 1.1 server for Ruby/Rack applications, usable in development and production.
- Official Docs: https://puma.io/
- GitHub: https://github.com/puma/puma
- RubyGems.org: https://rubygems.org/gems/puma
Rack was created as an interface to design a minimal API that sits between Ruby web servers, like Puma, so each developer did not need to create custom connectors. It comes with a config.ru file, which acts as a deployment script containing instructions on what to load and how to run the core application logic. This setup is executed locally using rackup, a command-line utility that parses the configuration file and boots the application.
The Ruby gem Sinatra, is a minimalist DSL (Domain Specific Language) that simplifies mapping URLs to Ruby code incredibly simple. The Sinatra ecosystem: sinatra-contrib, common extensions offering automatic code reloading and configuration engines; sinatra-flash, a utility used to pass temporary message alerts between HTTP redirects.
For the next part, we will cover Step 3: Setting up Render. Until then...
No comments:
Post a Comment