Ronnie Miller

My name is Ronnie. I'm a product-minded software engineer, building SaaS products and the infrastructure that runs them.

I live on California's Redwood Coast and have been building software for over 15 years. That work covers code, cloud infrastructure, security, and leading engineering teams.

Currently, you can find me leading engineering efforts as Partner and CTO of KABI Automotive. I also explore the edges of AI at BuildTestRun and share what I'm building and learning on my YouTube channel, Build at Scale. The notes below are where I write down what I build and what breaks.

Capistrano couldn't authenticate, but ssh could

cap production deploy failed with Net::SSH::AuthenticationFailed while plain ssh worked. My be function had run Capistrano inside a Docker container with no SSH keys.

Moving Neovim to vim.lsp.enable

A Homebrew upgrade took Neovim from 0.9.5 to 0.11, which deprecated my lspconfig setup. TypeScript only attached once vim.lsp.enable ran at the top level.

ECS Exec always runs as root

The app in my container ran as a non-root user, but every ECS Exec shell came up as uid 0. That is how ECS Exec works, so the controls belong in IAM and session logging.

AWS 17

  1. Counting requests per 15 minutes in Logs Insights
  2. ECS Exec always runs as root
  3. Docker layer caching in CI, and the tag I overwrote
  4. SSM stopped working when I removed the public IP
  5. pulumi import gave me stale code
  6. TLS from the load balancer to the container
  7. Connecting Rails to Amazon RDS with SSL
  8. Running Rails migrations on an ECS deploy
  9. You can't backdate an S3 object
  10. Inspector suppression rules update by ARN, not by name
  11. Packer's env() only works in a variable default
  12. Mount the partition, not the disk
  13. Block Public Access wins over a public bucket policy
  14. From a log line to a command on the same box
  15. Remote Database Connection via ECS Fargate
  16. HTTPS For Your Static S3 Website
  17. Static Website Hosting on Amazon S3

Ruby and Rails 14

  1. nginx returned 405 for PATCH
  2. Capistrano couldn't authenticate, but ssh could
  3. A Compose volume was hiding my Bundler config
  4. A missing index, found with rack-mini-profiler
  5. wkhtmltopdf in an Alpine image
  6. after_commit and read_changed? never fire together
  7. Connecting Rails to Amazon RDS with SSL
  8. Running Rails migrations on an ECS deploy
  9. Ruby 3.3: the lambda method requires a literal block
  10. Is this memoization thread safe?
  11. Building Ruby 3.0.7 on an M2 Mac
  12. Ruby 2.3 – A Gift for You and Me
  13. RailsConf 2015, Atlanta Georgia
  14. Trying out new features of Ruby 2.2

Command line and Git 12

  1. Capistrano couldn't authenticate, but ssh could
  2. Moving Neovim to vim.lsp.enable
  3. tmux was running as x86 on my M4
  4. Git doesn't know where a branch came from
  5. Print only the last block from a log
  6. In a rebase, ours and theirs swap places
  7. From a log line to a command on the same box
  8. An alias can't put arguments in the middle
  9. fatal: bad revision 'main' in a GitHub Action
  10. Dear xargs, I appreciate you
  11. Migrate a Git Repository between Local Machines
  12. Vim plugins lost in the Vundle

Docker and CI 7

  1. Deploying a Cloudflare Worker from GitHub Actions
  2. Postgres in Docker ignored my POSTGRES_ settings
  3. ECS Exec always runs as root
  4. A Compose volume was hiding my Bundler config
  5. Cloud Run job args replace the command
  6. Docker layer caching in CI, and the tag I overwrote
  7. wkhtmltopdf in an Alpine image

Databases 5

  1. Postgres in Docker ignored my POSTGRES_ settings
  2. A missing index, found with rack-mini-profiler
  3. Connecting Rails to Amazon RDS with SSL
  4. Remote Database Connection via ECS Fargate
  5. Execute pg_dump against a remote database

JavaScript 4

  1. Deploying a Cloudflare Worker from GitHub Actions
  2. Bootstrap 2 caps you at jQuery 2
  3. An axios upgrade dropped my POST body
  4. A date dropdown that broke two ways

This site 4

  1. Make Me A Workflow
  2. Transitioning to a Notebook-style format
  3. HTTPS For Your Static S3 Website
  4. Static Website Hosting on Amazon S3

Python and data 2

  1. Becoming Friends with Pandas
  2. Jupyter Notebooks: My New Favorite REPL

Integrations 2

  1. Configure Bugsnag to sync with Trello
  2. Slack bot for API Documentation

Rust 1

  1. Upgrading a Rust Project