Poskładaj to razem — Solid Stack bez Redisa, Kamal, pgvector i wypracowane w praktyce zasady budowania z LLM — a wyłania się spójny obraz: Rails to znakomite środowisko dla aplikacji AI-native, właśnie dlatego, że pozwala małemu zespołowi budować i uruchamiać zarówno aplikację, jak i jej funkcje AI. Synteza tego, w którym miejscu ten stos się dziś znajduje.
Historia JIT Ruby po cichu stała się jedną z najciekawszych rzeczy w języku. Z Ruby 3.5 YJIT jest dojrzały i rozsądnym domyślnym — a nowy JIT oparty na metodach, ZJIT, wyłania się obok niego. Spojrzenie na koniec roku na to, gdzie stoi praca wydajnościowa Ruby i dlaczego posiadanie dwóch podejść JIT to zdrowy znak.
Gdy Rails 8 wyszło, byłem entuzjastyczny wobec stosu „Solid” bez-Redisa i tezy frameworka jednej osoby. Teraz uruchamiałem go na produkcji przez sześć miesięcy. Oto uczciwa retrospektywa: gdzie dostarczył, gdzie były szorstkie krawędzie i czy uproszczenie wytrzymało pod prawdziwym obciążeniem.
Ruby 3.4 robi ostrożny krok ku zmianie tworzonej od dekady: uczynieniu literałów łańcuchowych zamrożonymi domyślnie. Mechanizm przejścia — „schłodzone” łańcuchy, które ostrzegają zamiast łamać — to mała lekcja mistrzowska ewolucji języka bez łamania świata. Spojrzenie na to, dlaczego zamrożone łańcuchy i jak Ruby dochodzi tam łagodnie.
Rails 8 nadchodzi z po cichu radykalną ideą: być może już nie potrzebujesz Redisa. Solid Queue i Solid Cache przenoszą zadania w tle i cache do bazy, zwijając standardowy produkcyjny stack Railsów. Spojrzenie na to, co robią biblioteki Solid, dlaczego „po prostu użyj Postgresa” wciąż wygrywa i kiedy stara odpowiedź jeszcze się broni.
Nagłówkiem Ruby 3.3 jest szybszy, dojrzalszy YJIT — ale cichszą, bardziej brzemienną zmianą jest Prism, nowy parser tolerujący błędy, który staje się standardem. Spojrzenie na to, co jest w tegorocznym świątecznym wydaniu, co dostajesz za darmo i dlaczego nowy parser ma większe znaczenie, niż brzmi.
Function calling pozwala LLM-owi poprosić twój kod o uruchomienie funkcji i skorzystanie z wyniku — model, który umiał tylko mówić, zaczyna wyszukiwać dane i działać. Szczegółowo o tym, jak to naprawdę działa, dlaczego to po prostu ustrukturyzowany output z pętlą dookoła i dlaczego to ty w pełni kontrolujesz, co się faktycznie uruchamia.
Wywołanie LLM trwa sekundy, a użytkownik gapiący się na spinner czuje każdą z nich. Strumieniowanie tokenów w miarę ich generowania zamienia martwe oczekiwanie w żywy tekst — a Turbo Streams to dokładnie ten prymityw Railsów, który wypycha ten tekst na stronę. Deep-dive o podłączeniu wolnego wyjścia modelu do responsywnego UI.
Ruby 3.1 przybywa w Boże Narodzenie z YJIT — nowym JIT od Shopify, który wreszcie przyspiesza realne obciążenia Rails, nie tylko benchmarki — plus nowoczesny debugger, lepsze komunikaty błędów i wygodną składnię. Praktyczny przegląd.
SOLID może brzmieć jak zbiór pustych akronimów, dopóki system nie urośnie na tyle, żeby ukarać cię za ich ignorowanie. Opowieść z praktyki o zastosowaniu tych pięciu zasad w systemie tradingowym — gdzie każda z nich naprawdę się sprawdziła, a dogmatyczne trzymanie się ich tylko by zaszkodziło.
Ruby 2.6.0 ukazuje się w Boże Narodzenie z pierwszym krokiem ku kompilatorowi JIT — dużą sprawą dla przyszłości Ruby — plus nieskończone zakresy, then jako alias dla yield_self i Bundler w bibliotece standardowej. Praktyczny przegląd.
GraphQL pozwala klientowi poprosić dokładnie o dane, których potrzebuje, rozwiązując over- i under-fetching REST. Deep-dive o graphql-ruby — typy, zapytania, mutacje, resolvery — pułapka N+1, którą tworzy, i uczciwe spojrzenie na GraphQL vs REST.
Każda publiczna aplikacja jest tłuczona — credential-stuffing na loginie, scrapery na katalogu, brute force na API. Deep-dive o Rack::Attack: throttling, blokowanie i śledzenie w stylu fail2ban, zastosowane na właściwej warstwie, by trzymać nadużycia z dala od aplikacji.
Docker dojrzał z ciekawostki w domyślny sposób na spójne środowisko. Przewodnik po dockeryzacji aplikacji Rails pod development i CI — docker-compose dla całego stosu, dyscyplina cache'u warstw i gdzie Docker pomaga, a gdzie dodaje tarcie.
Rails 5.2 wreszcie umieszcza wgrywanie plików we frameworku z ActiveStorage. Przegląd tego, jak działa — bloby, załączniki, backendy usług, warianty i bezpośrednie uploady — oraz uczciwe porównanie z CarrierWave i Paperclip.
Partiale plus helpery plus zmienne instancji czynią widoki Rails trudnymi do reużycia i niemożliwymi do testowania. Deep-dive o komponentach widoku w Rails z Cells — enkapsulowane, testowalne jednostki UI i dlaczego idea komponentów przychodzi na serwer.
Historia z okopów: zbudowaliśmy szybko na MongoDB, uderzyliśmy w granice modelu dokumentowego, uruchomiliśmy Mongo i Postgresa obok siebie w jednej aplikacji Rails i migrowaliśmy kolekcja po kolekcji do Postgresa bez przestoju. Co to kosztowało, jak to zrobiliśmy i co zrobilibyśmy inaczej.
Logika widoku nie ma w Rails dobrego miejsca — przecieka do modeli i zaśmieca szablony. Deep-dive o dekoratorach i presenterach: różnica, kiedy używać którego, czyste PORO vs Draper i jak trzymać prezentację z dala od domeny.
Rails 5.1 zawiera pokój z nowoczesnym JavaScriptem i zaostrza zarządzanie sekretami. Przegląd wydania — Webpacker i yarn, szyfrowane sekrety, testy systemowe, form_with i porzucenie jQuery jako domyślnego.
Przyjmowanie pieniędzy to część e-commerce, której nie możesz sobie pozwolić zepsuć. Deep-dive o poprawnej integracji bramki płatności — tokenizacja, klucze idempotencji, webhooki jako źródło prawdy i modelowanie płatności jako maszyny stanów.
Ruby 2.4.0 przybywa w Boże Narodzenie z dawno spóźnionym porządkiem — Fixnum i Bignum scalone w jeden Integer — plus szybszy Hash, Enumerable#sum, Regexp#match? i binding.irb. Praktyczny przegląd.
Strona katalogu szybka dla dziesięciu użytkowników może paść przy dziesięciu tysiącach. Deep-dive o warstwach cache'owania, które trzymają ją szybką — cache fragmentów, cache HTTP/CDN, cache niskopoziomowy — i o trudnej części: unieważnianiu i stampede.
Sprzedaż w wielu krajach oznacza tłumaczenie nie tylko interfejsu, ale danych, URL-i, formatów i SEO. Deep-dive o i18n w Rails przy skali — pliki lokalizacji, tłumaczona treść, routing lokalny i pułapki.
Katalog produktów to głównie obrazy, a naiwna obsługa obrazów go zatopi. Deep-dive o budowie skalującego się potoku obrazów — trzymanie oryginałów, generowanie wariantów w tle, offload na CDN i nietopienie serwerów webowych.
Sprzedaż w więcej niż jednej walucie brzmi jak problem wyświetlania, a okazuje się problemem modelowania danych. Deep-dive o poprawnym reprezentowaniu pieniędzy, przechowywaniu cen w wielu walutach, kursach wymiany, zaokrąglaniu i błędach kosztujących prawdziwe pieniądze.
Rails 5 wnosi ActionCable — WebSockety zintegrowane z frameworkiem. Deep-dive o kanałach, subskrypcjach i broadcastowaniu, jak działa pub/sub oparty na Redisie i o realiach skalowania trzymania tysięcy otwartych połączeń.
Rails to świetny mechanizm dostarczania i kiepskie miejsce na logikę biznesową. Deep-dive o architekturze heksagonalnej w Railsach — porty i adaptery, izolacja domeny od frameworka i jak daleko to ciągnąć, zanim stanie się przeinżynierowaniem.
Ruby 2.3.0 ląduje w Boże Narodzenie z dwiema zmianami, które będziesz pisać codziennie — pragmą frozen-string-literal i operatorem bezpiecznej nawigacji &. — plus dig, did_you_mean i więcej. Praktyczny przegląd.
Długo żyjące gałęzie funkcji powodują bolesne merge'e i wielkowybuchowe release'y. Feature flagi pozwalają mergować do trunka nieustannie i oddzielić deploy od release'u. Przewodnik po workflow, rodzajach flag i zarządzaniu długiem flag.
Zapytanie N+1 to najczęstszy błąd wydajnościowy w aplikacjach Rails i ukrywa się idealnie w developmencie. Deep-dive o tym, co je powoduje, różnicy między preload/eager_load/includes, counter cache i jak łapać je automatycznie.
Każde żądanie Rails przechodzi przez stos middleware Rack, zanim w ogóle dotrze do twojego kontrolera. Deep-dive o tym, czym jest Rack, jak działa stos middleware i jak napisać własne do logowania, autoryzacji i więcej.
SQL LIKE to nie wyszukiwanie. Deep-dive o dodaniu prawdziwego wyszukiwania pełnotekstowego do aplikacji Rails z Elasticsearch — analizatory, mapowania, trafność, trzymanie indeksu w synchronizacji — i uczciwe spojrzenie na to, kiedy zamiast tego wystarczy Postgres.
Capistrano automatyzuje wdrożenie po SSH z atomowymi releasami i rollbackiem na jedną komendę. Praktyczny przewodnik po modelu releases/current, plikach współdzielonych, łańcuchu zadań Rails, konfiguracji multistage i pułapkach wartych poznania.
Chude kontrolery wepchnęły całą logikę w grube modele, a teraz są nie do opanowania. Obiekty usługowe to najpopularniejsza poprawka — oto jak używać ich dobrze, kiedy pomagają i jak zamieniają się w gorszy bałagan, gdy przesadzisz.
Sidekiq przetwarza zadania w tle wątkami i Redisem, i jest szybki — ale szybkość przychodzi z regułami. Deep-dive o tym, jak działa, dlaczego twoje zadania muszą być małe i idempotentne i jak przeżyć ponawiania oraz współbieżność.
Postgres 9.4 wnosi JSONB — indeksowalny, odpytywalny JSON wewnątrz kolumny relacyjnej. Deep-dive o tym, kiedy po niego sięgać, jak go odpytywać i indeksować, integracji z Rails 4.2 i o pułapce traktowania bazy SQL jak magazynu dokumentów.
Ruby 2.2.0 przybywa w Boże Narodzenie z dwoma usprawnieniami garbage collectora ważnymi dla realnych aplikacji — inkrementalnym GC skracającym pauzy i GC symboli, który wreszcie zamyka długotrwały wyciek pamięci i wektor ataku DoS.
Release candidate Rails 4.2 jest już dostępny. Spojrzenie na trzy najważniejsze zmiany — ujednolicone API zadań w tle, po cichu duży zysk wydajności w ActiveRecord i klucze obce wreszcie lądujące w migracjach.
Dlaczego strona statyczna to właściwe narzędzie na blog programisty i jak zbudować go z Jekyllem oraz hostować za darmo na GitHub Pages — front matter, layouty Liquid, posty w Markdownie i pisanie w tym samym workflow, którego już używasz do kodu.
Ansible konfiguruje serwery po zwykłym SSH, bez agenta do instalacji. Praktyczny przewodnik po provisioningu serwera aplikacji Ruby idempotentnymi playbookami i reużywalnymi rolami — i dlaczego bezagentowość nas przekonała.
Klikanie po konsoli AWS nie skaluje się poza garstkę serwerów. Jak sterujemy flotą EC2 z Ruby — deklarując instancje jako dane, uzgadniając stan pożądany z faktycznym i tagując się ku zdrowiu psychicznemu.
Rails 4.1 to po cichu znakomite wydanie punktowe. Przegląd funkcji, które wdrożyliśmy od razu — config/secrets.yml, podglądy ActionMailera, enumy ActiveRecord, preloader Spring i warianty żądań — wraz z drobnym drukiem każdej.
Docker zbliża się do 1.0 i zmieni sposób, w jaki wysyłamy aplikacje Ruby. Praktyczny przewodnik po obrazach, kontenerach i Dockerfile'ach — budowa odtwarzalnego środowiska deweloperskiego i dlaczego „działa na mojej maszynie” wreszcie odchodzi.
Cucumber jest albo mostem do twoich ekspertów domeny, albo kosztowną warstwą pośrednią — a to, który, zależy w całości od tego, jak go piszesz. Oto gdzie się opłaca, gdzie nie i jakie reguły stosujemy.
Użytkownicy robią literówki, a dopasowanie dokładne po cichu ich zawodzi. Praktyczny deep-dive w rozmyte dopasowanie oparte na trigramach w Ruby — jak działa, jak je przyspieszyć i kiedy zamiast tego wepchnąć je do Postgresa.
Dwa narzędzia, po które sięgamy w każdym projekcie Rails. Jak HAML czyni szablony czytelnymi, a SASS utrzymuje arkusze stylów w ryzach — ze wzorcami, które działają, i pułapkami (nadmierne zagnieżdżanie, @extend), które nie.
Ruby 2.1.0 ukazało się w Boże Narodzenie, jak nakazuje tradycja. Nagłówek to generacyjny garbage collector, ale to zmiany w języku — wymagane argumenty nazwane, refinements, Exception#cause — odmienią sposób, w jaki piszemy kod.
Twój zestaw testów działa na jednym rdzeniu, a pozostałe trzy stoją bezczynnie. Rzetelny przewodnik po rozdzielaniu RSpec na procesy z parallel_tests — osobne bazy, grupy balansowane czasem, błędy izolacji, które ujawnia, i skalowanie na węzły CI.
Weekendowy projekt: maleńki sejf na hasła z linii poleceń oparty na Ruby i OpenSSL. Rzetelny przegląd wyprowadzania kluczy, IV, szyfrowania z uwierzytelnieniem, porównania w czasie stałym — i każdego sposobu, w jaki da się kryptografię po cichu i z pewnością siebie zepsuć.
Wdrażamy MongoDB z Mongoid na realnych projektach. Oto czym modelowanie dokumentów naprawdę różni się od ActiveRecord — embedded vs referenced, brak joinów, indeksy, zapisy atomowe, granice spójności i gdzie schemaless po cichu boli.
Rails 4.0 właśnie się ukazał. Oto rzetelne, prosto z okopów spojrzenie na to, co wdrażamy na realnych projektach — strong parameters, kompromis Turbolinks, caching „matrioszki”, pierwszoklasowy Postgres i pułapki aktualizacji.
Wzorzec projektowy w Ruby pozwalający rozszerzać obiekty o nowe zachowania w czasie wykonania, przy użyciu modułów i klas singletonowych — na przykładzie postaci z gry RPG.