Migrating from Elasticsearch to Opensearch: searchkick instructions (without downtime!)
Zero-downtime migration from Elasticsearch to OpenSearch for Searchkick apps, including staging validation, client switching, and environment-specific index settings.
An incomplete guide to migrate a Rails application from paperclip to carrierwave
Rails file storage migration with background jobs, reruns, and URL rewrites; large media backfills need careful testing, queue tuning, and fallback handling.
Jasmine: Testing if two arrays contain the same elements
Array comparisons in Jasmine need different matchers for exact order, unordered equality, or subset checks when testing collections.
Do not use transparent PNGs for iOS favicons
Transparent apple-touch-icon images on iOS turn black in Safari, so solid backgrounds prevent ugly home-screen and bookmark icons.
ActiveRecord: Cleaning up your database with ignored_colums
Unused database columns confuse teams and can linger safely while legacy access is phased out. ignored_columns removes Rails accessors and helps flag fields for later removal.
Five years of "Today I Learned" from Josh Branchaud
A curated set of 900+ personal programming tips spans Ruby, Rails, Git, Unix, Chrome, and JavaScript, with many small shortcuts for daily development work.
Video transcoding: Web and native playback overview (April 2020)
Browser video playback depends on container and codec support; MP4 with H.264 and AAC works broadly, while WebM can serve modern clients and downloads need native playback support.
Manually trigger a delegated DOM event
Delegated jQuery events can be hard to fire programmatically for testing; native dispatchEvent with the right event class works better than trigger in many cases.
Custom RSpec matcher for allowed values (or assignable_values)
Custom RSpec matcher for checking allowed association values, useful when validating assignable_values on model associations.
Test your CSS rendering output with GreenOnion
Front-end styling regressions are hard to catch in views and pages. GreenOnion stores browser snapshots and compares them with diff images or percentage differences.
Git diff: Deemphasizing code that was only moved around
Long diffs can hide real edits inside large code moves; git diff --color-moved=dimmed-zebra dims unchanged moved lines and highlights changes.
Use CSS "text-overflow" to truncate long texts
Single-line text can overflow its container in Rails views; text-overflow: ellipsis and white-space: nowrap produce cleaner truncation in supported browsers.
Rails: Rest API post-mortem analysis
Rails API backends can be fast and easy to extend, but serializer maintenance, schema drift, documentation limits, and missing rate limits create real operational risks.
RSpec's hash_including matcher does not support nesting
hash_including cannot match nested hashes reliably; use nested matchers such as include or another hash_including for partial hash checks.
Why preloading associations "randomly" uses joined tables or multiple queries
ActiveRecord :include can switch between separate queries and SQL joins, causing ambiguous ORDER BY clauses and hidden production bugs when associations are preloaded.
Jasmine: using async/await to write asynchronous specs
Readable Jasmine specs can use async/await for promises, async setup, event waiting, and controllable async spies instead of done callbacks.
Ruby bug: Symbolized Strings Break Keyword Arguments in Ruby 2.2
Dynamically created symbols can make keyword arguments turn nil in Ruby 2.2 when a method uses several keywords and **options.
Debug SAML in development using a local keycloak server
Local Keycloak can emulate a SAML identity provider for development, letting SSO flows and attribute mapping be tested without waiting on an external IDP.
What we know about PDFKit
PDF generation from Rails uses a WebKit-based wrapper around wkhtmltopdf, with print styling, headers, footers, and binary-version pitfalls.
Rspec 3: what to do when `describe` is undefined
RSpec 3 can raise undefined method 'describe' for main:Object when DSL methods are not exposed globally; disable_monkey_patching! turns them off, and expose_dsl_globally = true restores them.
Sass: How to get rid of deprecation warnings in dependencies
Sass 1.35.0 can suppress dependency deprecation warnings with quietDeps and limit warnings in your own code with silenceDeprecations.
makandra/gemika: Helpers for testing Ruby gems
A library for testing a Ruby gem against multiple Ruby, dependency and database combinations, with shared local and CI setup for full permutation coverage.
Using before(:context) / before(:all) in RSpec will cause you lots of trouble unless you know what you are doing
before(:context) in RSpec runs once outside transactions and can leak data between examples; before(:example) keeps specs isolated and safer.
ActiveType::Object: Be careful when overriding the initialize method
Overriding initialize in ActiveType::Object can break ActiveRecord-style setup, freeze instances, or cause argument errors unless super is called with one attribute hash.