๐ŸŽ ๐Ÿถ flag_shih_tzu v1.0.0 is finally out, 8 years after 0.3.23. There are breaking changes, and many new features, including multi-bit flags ๐Ÿฉต think multiple enum attributes in a single integer column! Also complete Truffleruby and JRuby support.

 I write about the most important breaking change here:
https://dev.to/galtzo/why-flagshihtzu-is-changing-its-default-sql-for-bit-flags-41l9
#ruby #bitfields #activerecord

Why flag_shih_tzu is changing its default SQL for bit flags

flag_shih_tzu v1.0.0 changes the default query mode from IN lists to bit operators for safer rolling deploys.

DEV Community

๋ฉ€ํ‹ฐ ํ˜ธ์ŠคํŠธ Kamal ๋ฐฐํฌ ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€ํ•˜๊ธฐ

์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ์— ๋™์‹œ ๋ฐฐํฌํ•  ๋•Œ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ db:prepare๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฝ ๊ฒฝ์Ÿ์œผ๋กœ ์ธํ•ด ActiveRecord::ConcurrentMigrationError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

๋ฉ€ํ‹ฐ ํ˜ธ์ŠคํŠธ Kamal ๋ฐฐํฌ ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€ํ•˜๊ธฐ

์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ์— ๋™์‹œ ๋ฐฐํฌํ•  ๋•Œ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ db:prepare๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฝ ๊ฒฝ์Ÿ์œผ๋กœ ์ธํ•ด ActiveRecord::ConcurrentMigrationError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Ruby-News | ๋ฃจ๋น„ AI ๋‰ด์Šค

๋ฉ€ํ‹ฐ ํ˜ธ์ŠคํŠธ Kamal ๋ฐฐํฌ ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฉ€ํ‹ฐ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์‹œ์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹œ๋„ํ•˜๋ฉด ActiveRecord::ConcurrentMigrationError๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ถ€ํŒ…์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

๋ฉ€ํ‹ฐ ํ˜ธ์ŠคํŠธ Kamal ๋ฐฐํฌ ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฉ€ํ‹ฐ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์‹œ์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹œ๋„ํ•˜๋ฉด ActiveRecord::ConcurrentMigrationError๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ถ€ํŒ…์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค.

Ruby-News | ๋ฃจ๋น„ AI ๋‰ด์Šค

Rails ์ฃผ๊ฐ„ ๋‰ด์Šค: ์•ˆ์ „ํ•œ to_i ๋ณ€ํ™˜, ์ปค์Šคํ…€ ๋‚ ์งœ ํ˜•์‹ ๋ฐ PostgreSQL 18.4 ์ง€์›

ActiveModel์˜ to_i ์ž๋™ ๋ณ€ํ™˜ ์‹œ ์ž…๋ ฅ ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ์ œํ•œํ•˜์—ฌ ๋งค์šฐ ๊ธด ๋ฌธ์ž์—ด๋กœ ์ธํ•œ DoS ๊ณต๊ฒฉ ์œ„ํ—˜์„ ๋ง‰์Šต๋‹ˆ๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

AnnotateRb: Rails ๋ชจ๋ธ ๋ฐ ๋ผ์šฐํŠธ ์Šคํ‚ค๋งˆ ์ž๋™ ์ฃผ์„ ๋„๊ตฌ

AnnotateRb๋Š” Rails ๋ชจ๋ธ, ๋ผ์šฐํŠธ, ํ…Œ์ŠคํŠธ, ํŒฉํ† ๋ฆฌ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ •๋ณด๋ฅผ ์ฃผ์„์œผ๋กœ ์ž๋™ ์ถ”๊ฐ€ํ•˜๋Š” ์ ฌ์ด๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

AnnotateRb: Rails ๋ชจ๋ธ ๋ฐ ๋ผ์šฐํŠธ ์Šคํ‚ค๋งˆ ์ž๋™ ์ฃผ์„ ๋„๊ตฌ

AnnotateRb๋Š” Rails ๋ชจ๋ธ, ๋ผ์šฐํŠธ, ํ…Œ์ŠคํŠธ, ํŒฉํ† ๋ฆฌ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ •๋ณด๋ฅผ ์ฃผ์„์œผ๋กœ ์ž๋™ ์ถ”๊ฐ€ํ•˜๋Š” ์ ฌ์ด๋‹ค.

Ruby-News | ๋ฃจ๋น„ AI ๋‰ด์Šค

Rails ์—…๋ฐ์ดํŠธ: SQL ๋กœ๊ทธ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐ ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์•ˆ์ •์„ฑ ๊ฐ•ํ™”

๋Œ€๊ทœ๋ชจ SQL ์ฟผ๋ฆฌ ๋กœ๊น… ์‹œ ๋ฐœ์ƒํ•˜๋˜ ์ •๊ทœํ‘œํ˜„์‹ ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ๋ฅผ ์•ต์ปค๋ง ํŒจํ„ด ๋„์ž…์œผ๋กœ ํ•ด๊ฒฐํ•˜์—ฌ ๋กœ๊ทธ ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ–ˆ๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

Rails ์—…๋ฐ์ดํŠธ: SQL ๋กœ๊ทธ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐ ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์•ˆ์ •์„ฑ ๊ฐ•ํ™”

๋Œ€๊ทœ๋ชจ SQL ์ฟผ๋ฆฌ ๋กœ๊น… ์‹œ ๋ฐœ์ƒํ•˜๋˜ ์ •๊ทœํ‘œํ˜„์‹ ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ๋ฅผ ์•ต์ปค๋ง ํŒจํ„ด ๋„์ž…์œผ๋กœ ํ•ด๊ฒฐํ•˜์—ฌ ๋กœ๊ทธ ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ–ˆ๋‹ค.

Ruby-News | ๋ฃจ๋น„ AI ๋‰ด์Šค

Rails์˜ ๊ธฐ๋ณธ ๋ณด์•ˆ ๊ธฐ๋Šฅ: ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ฏผํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ณด์•ˆ ์„ค๊ณ„

Rails๋Š” SQL Injection, XSS, CSRF ๋“ฑ ์ฃผ์š” ์›น ๋ณด์•ˆ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๋ฐฉ์–ด ๊ธฐ์ž‘์„ ํ”„๋ ˆ์ž„์›Œํฌ ์ˆ˜์ค€์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

Rails์˜ ๊ธฐ๋ณธ ๋ณด์•ˆ ๊ธฐ๋Šฅ: ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ฏผํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ณด์•ˆ ์„ค๊ณ„

Rails๋Š” SQL Injection, XSS, CSRF ๋“ฑ ์ฃผ์š” ์›น ๋ณด์•ˆ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๋ฐฉ์–ด ๊ธฐ์ž‘์„ ํ”„๋ ˆ์ž„์›Œํฌ ์ˆ˜์ค€์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

Ruby-News | ๋ฃจ๋น„ AI ๋‰ด์Šค

Rails์˜ ๋ณธ์งˆ์„ ํ™œ์šฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ์ •๋ฆฌ: ์„œ๋น„์Šค ๊ฐ์ฒด ๋‚จ์šฉ ๋ฐฉ์ง€

ActiveRecord๋ฅผ ๋‹จ์ˆœํ•œ ORM์ด ์•„๋‹Œ ๊ด€๊ณ„ํ˜• ์—”์ง„์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ์ง€์—ฐ ํ‰๊ฐ€์™€ ๊ด€๊ณ„ํ˜• ๋Œ€์ˆ˜๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ”— ์›๋ฌธ ๋ณด๊ธฐ

Rails์˜ ์˜๋„๋ฅผ ๋”ฐ๋ฅด๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ์ •๋ฆฌ: ์„œ๋น„์Šค ๊ฐ์ฒด ๋‚จ์šฉ ์—†๋Š” ์•„ํ‚คํ…์ฒ˜

ActiveRecord๋ฅผ ๋‹จ์ˆœํ•œ ORM์ด ์•„๋‹Œ ๊ด€๊ณ„ํ˜• ์—”์ง„์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ๊ด€๊ณ„ํ˜• ๋Œ€์ˆ˜(Selection, Projection, Join ๋“ฑ)๋ฅผ Ruby ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

Ruby-News | ๋ฃจ๋น„ AI ๋‰ด์Šค

[ENG] Now on stage: Nicolas Erlichman (@nicoerlichman) โ€” "Modeling Class Hierarchies in Active Record" at Tropical on Rails 2026.

[PT-BR] No palco agora: Nicolas Erlichman (@nicoerlichman) โ€” "Modeling Class Hierarchies in Active Record" no Tropical on Rails 2026.

#TropicalOnRails #ActiveRecord #Rails

[ENG] Now on stage: Miguel Marcondes Filho โ€” "ActiveRecord::Tenanted and SQLite" at Tropical on Rails 2026.

[PT-BR] No palco agora: Miguel Marcondes Filho โ€” "ActiveRecord::Tenanted and SQLite" no Tropical on Rails 2026.

#TropicalOnRails #SQLite #ActiveRecord