Rails Turbo Actioncable 500 Debug

Rails Turbo Stream 500 Error Triple Debugging — broadcast, SolidCable, Telegram Markdown

When running a Rails 8 + Hotwire (Turbo) application in production, broadcast_append_to callbacks can silently throw 500 errors. When that’s compounded by a SolidCable setup issue and Telegram Bot message parsing errors, interpreting the logs becomes genuinely confusing. All three hit at the same time in a recent project — here’s how each one was diagnosed and resolved. These three problems are independent of each other, but in practice they tend to surface together in a freshly deployed Rails 8 app. The key is to isolate each problem and fix them one at a time. ...

2026-01-09 · 9 min read · Seunghan
Rails Solidqueue Render Manual Assignment

Rails 8 + SolidQueue Render Deployment Triple Trouble — Missing Tables, AI Agent, Manual Assignment

While deploying a Rails 8-based ITSM system to Render today, I ran into three consecutive issues that each had different root causes but were connected like links in a chain. I’m documenting the process of reading deployment logs, debugging, patching code, and discovering the next problem. The stack covered in this post: Rails 8.1, SolidQueue 1.3.1, Puma, PostgreSQL, deployed on Render.com. Issue 1 — Application exited early with SolidQueue Symptoms The build succeeds in the Render deployment log, but the application dies immediately on startup. ...

2026-01-06 · 10 min read · Seunghan
Rails Ruby3 Kwargs Dispatch Integration Debug

A Day of Debugging — Ruby 3.0 kwargs, Docker env, NAS Cron, SSH Special Characters

I was building a dispatcher that lets an AI agent call a Rails API server to automatically assign tickets. The logic itself was straightforward, but the integration kept hitting unexpected walls. Over the course of one day, I ran into seven distinct bugs — each small on its own, but exhausting in rapid succession. I’m writing them down in hopes they save someone else the same frustration. 1. Ruby 3.0 kwargs Separation — Why Does render_success(key: val) Blow Up? This one cost the most time. In a Rails controller, I was calling a response helper like this: ...

2026-01-02 · 10 min read · Seunghan
Hotwire Native Ios Tab Bar Patterns

Hotwire Native iOS Tab Bar App — HotwireTabBarController Implementation and Debugging

Here are the problems encountered when switching from a single Navigator to the HotwireTabBarController pattern while wrapping a Rails app with Hotwire Native. Bugs that were invisible in the simulator surfaced on TestFlight, and local dev environment settings got tangled – multiple points where time was wasted. 1. HotwireTabBarController Basic Structure Instead of a single Navigator, each tab has its own independent Navigator and WKWebView. // AppTab.swift enum AppTab: String, CaseIterable { case home, ai, request var systemImage: String { switch self { case .home: return "house" case .ai: return "message" case .request: return "checkmark.circle" } } var selectedSystemImage: String { switch self { case .home: return "house.fill" case .ai: return "message.fill" case .request: return "checkmark.circle.fill" } } var url: URL { let base = AppDelegate.baseURL switch self { case .home: return base.appendingPathComponent("dashboard") case .ai: return base.appendingPathComponent("conversations") case .request: return base.appendingPathComponent("service_requests") } } var hotwireTab: HotwireTab { HotwireTab( title: "", image: UIImage(systemName: systemImage)!, selectedImage: UIImage(systemName: selectedSystemImage)!, url: url ) } } // SceneController.swift core part private lazy var tabBarController: HotwireTabBarController = { let controller = HotwireTabBarController(navigatorDelegate: self) controller.load(AppTab.allCases.map(\.hotwireTab)) // Show only tab icons, remove text controller.viewControllers?.forEach { vc in vc.tabBarItem.title = nil vc.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) (vc as? UINavigationController)?.delegate = self } return controller }() To remove tab titles and keep only icons, both tabBarItem.title = nil and imageInsets adjustment are needed. Setting only title to nil leaves the icon position unchanged, looking awkward. ...

2025-12-26 · 6 min read · Seunghan
Rails Devise Multistep Signup Resend Email

Rails 8 + Devise Multi-Step Signup & Resend Email Debugging

This documents the problems encountered while integrating role-based multi-step signup and the Resend email service on a Rails 8 + Inertia.js + Svelte 5 stack. 1. Role-Based Conditional Multi-Step Signup Form Requirements In a service with two user roles, the signup flow needed to differ: Role A: Basic info -> Work selection -> Organization info (3 steps) Role B: Basic info -> Work selection (2 steps, organization info unnecessary) Implementing Conditional Steps with Svelte 5 Runes Used $derived to dynamically handle total step count and button behavior based on role. ...

2025-12-20 · 4 min read · Seunghan
Rails Denormalized Cache Vs Count Query

Rails Denormalized Cache Column vs COUNT Query Mismatch: When Seed Data Creates 0%

I inserted demo seed data directly into a Rails app, and all percentages showed as 0% on the screen. Server logs were clean, the data was clearly in the DB, yet the numbers would not appear. Situation This was a Rails app with a voting feature. There is a screen showing vote counts per choice, calculating percentages against total votes and displaying them with progress bars and numbers. I needed to show a demo, so I fetched real-time data from an external API and inserted it as seed data. The approach was simple: ...

2025-12-16 · 4 min read · Seunghan
Mcp Flutter Rails System Category Debug

From MCP Tool Integration to Flutter Settings Toggle — Debugging Record

I created categories on the server side using MCP tools. But the new categories were not visible in the mobile app. It seemed like a simple problem, but the deeper I dug, the more layers were tangled together. The Beginning: Categories Created via MCP Not Showing in App I created system categories like dev/, memory on the server through MCP tools. Calling the API directly showed the data. Refreshing the app did not show them. ...

2025-12-13 · 5 min read · Seunghan
Crypto Exchange Api Integration Lessons

What 5 Crypto Exchange APIs Don't Tell You in Their Docs — Rails Integration Lessons

Notes on the problems encountered while building a funding rate collection feature from multiple cryptocurrency exchanges in Ruby on Rails. Each of the 5 exchanges had different API behavior, and in some cases the official documentation didn’t match the actual behavior. Building a Common Base Client for Exchange APIs Before connecting multiple exchanges, I built a common HTTP client first. Used Faraday with retry and Circuit Breaker logic centralized here. ...

2025-12-06 · 7 min read · Seunghan
Api Response Wrapper Token Parsing Debug

Login Keeps Logging Out — Chain Bugs Caused by API Wrapper Format Mismatch

The mobile app keeps logging out. It works fine right after login, but when you background the app briefly and reopen it, the login screen appears. Token storage in SecureStorage was verified, and 401 auto-refresh via Dio interceptor was implemented. So why? Reproducing the Symptom Login to app -> works normally Restart app around access token expiration time -> Session restore fails, forced logout Found a hint in the server logs. ...

2025-12-02 · 5 min read · Seunghan
Hotwire Native Webview 8 Fixes

Hotwire Native WebView Debugging Collection — 8 Common Issues When Wrapping Rails WebView in Native Apps

When wrapping a Rails app with Hotwire Native (Turbo Native) to build iOS/Android native apps, there are quite a few things that work fine in the browser but behave strangely in WebView. Here are the issues encountered during actual development and the fixes applied, all in one place. Most can be resolved with a few lines of CSS or one line in the path configuration JSON. 1. Double-Tap Zoom / 300ms Click Delay Symptoms Double-tapping a button quickly zooms the screen. Even a single tap feels slightly delayed (about 300ms). ...

2025-11-25 · 5 min read · Seunghan
Privacy Policy Terms Disclaimer Contact