56,966 blogs · [
{
"id": "01a087e8-fbbc-70e8-aba8-72075ffd72eb",
"title": "Running Migrations Once During a Multi-Host Kamal Deploy",
"url": "https://t27duck.com/posts/32-running-migrations-once-during-a-multi-host-kamal-deploy",
"published_at": "2026-05-25T19:44:13+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-7207609b3e53",
"title": "Using UUIDv7 with Rails without PostgreSQL 18",
"url": "https://t27duck.com/posts/31-using-uuidv7-with-rails-without-postgresql-18",
"published_at": "2025-11-09T14:12:12+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720760b5b800",
"title": "Allow all columns and relations in associations in Ransack 4",
"url": "https://t27duck.com/posts/30-allow-all-columns-and-relations-in-associations-in-ransack-4",
"published_at": "2025-04-10T00:58:40+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720761af2746",
"title": "Migrating Away from Devise Part 6: Trackable Module and Tests",
"url": "https://t27duck.com/posts/29-migrating-away-from-devise-part-6-trackable-module-and-tests",
"published_at": "2025-01-24T22:36:27+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-72076237b770",
"title": "Migrating Away from Devise Part 5: User Sign-up",
"url": "https://t27duck.com/posts/28-migrating-away-from-devise-part-5-user-sign-up",
"published_at": "2025-01-16T21:58:16+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-7207627ffea0",
"title": "Migrating Away from Devise Part 4: Email Confirmation Setup",
"url": "https://t27duck.com/posts/27-migrating-away-from-devise-part-4-email-confirmation-setup",
"published_at": "2025-01-09T22:36:25+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-7207629a46f2",
"title": "Migrating Away from Devise Part 3: Password Recovery",
"url": "https://t27duck.com/posts/26-migrating-away-from-devise-part-3-password-recovery",
"published_at": "2025-01-02T22:57:00+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720763138be0",
"title": "Migrating Away from Devise Part 2: Sign-in",
"url": "https://t27duck.com/posts/25-migrating-away-from-devise-part-2-sign-in",
"published_at": "2024-12-27T19:33:31+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-7207635a6d3c",
"title": "Migrating Away from Devise Part 1: Setup and Sessions",
"url": "https://t27duck.com/posts/18-migrating-away-from-devise-part-1-setup-and-sessions",
"published_at": "2024-12-19T23:16:21+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720763959941",
"title": "A Bluesky AT Proto API Example in Ruby",
"url": "https://t27duck.com/posts/17-a-bluesky-at-proto-api-example-in-ruby",
"published_at": "2024-11-18T22:12:28+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720764059c26",
"title": "Migrating From Nginx to Caddy",
"url": "https://t27duck.com/posts/16-migrating-from-nginx-to-caddy",
"published_at": "2024-11-05T14:07:02+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720764802414",
"title": "Quick and dirty cron for Rails",
"url": "https://t27duck.com/posts/12-quick-and-dirty-cron-for-rails",
"published_at": "2024-05-22T22:09:18+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-72076532c6bc",
"title": "Integrating Google One Tap in a Rails Application",
"url": "https://t27duck.com/posts/10-integrating-google-one-tap-in-a-rails-application",
"published_at": "2022-06-25T20:41:33+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720765a2f9bc",
"title": "Adding an index to a partitioned table and its children in PostgreSQL and Rails",
"url": "https://t27duck.com/posts/9-adding-an-index-to-a-partitioned-table-and-its-children-in-postgresql-and-rails",
"published_at": "2022-03-30T16:33:32+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720765fcbc01",
"title": "How I Upgrade Ruby on Rails",
"url": "https://t27duck.com/posts/8-how-i-upgrade-ruby-on-rails",
"published_at": "2020-12-20T15:37:24+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720766807c05",
"title": "Programmatically Defer Sidekiq Jobs",
"url": "https://t27duck.com/posts/7-programmatically-defer-sidekiq-jobs",
"published_at": "2020-07-31T22:44:32+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720767566330",
"title": "Upgrading redis... not as difficult as you may think",
"url": "https://t27duck.com/posts/6-upgrading-redis-not-as-difficult-as-you-may-think",
"published_at": "2019-09-16T23:28:07+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-72076810af61",
"title": "Building, installing, and configuring your own Ruby RPM for CentOS",
"url": "https://t27duck.com/posts/3-building-installing-and-configuring-your-own-ruby-rpm-for-centos",
"published_at": "2016-07-23T01:21:35+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720768143ab7",
"title": "Seamlessly migrating from one git service to another for your team and capistrano",
"url": "https://t27duck.com/posts/2-seamlessly-migrating-from-one-git-service-to-another-for-your-team-and-capistrano",
"published_at": "2016-07-15T14:25:32+00:00"
},
{
"id": "01a087e8-fbbc-70e8-aba8-720768ba51a6",
"title": "Migrating from unicorn to puma with no downtime",
"url": "https://t27duck.com/posts/1-migrating-from-unicorn-to-puma-with-no-downtime",
"published_at": "2016-06-26T23:16:50+00:00"
}
] posts Claim your blog