Repository navigation
Conversation
|
@jsuchal nemali by sa pri takomto upgrade upgradnúť aj veci v bin adresári? Napr. v rails 8 je už v docker entrypoint aj ten jemalloc. A druhá otázka - potrebujeme tu v GO ešte ten yarn a package.json? V AGP sa používa tw4 aj turbo aj stimulus a žiadny yarn ani package.json tam nie je. Používa sa tam importmap a vybavené. Toto nechceme tiež meniť? |
dobra poznamka. dal som agentovi spravit bokom vanilla rails 8.1 app a nech najde zmeny a spravi tak aby dobre bolo. pushujem. |
Removing jsbundling-rails while adopting importmap assets dropped the yarn install that used to run before the tests, so puppeteer (a package.json runtime dependency used by Grover) was no longer present on the runner. MessageObjectsApiTest#test_can_get_PDF_visualization then hit Grover::DependencyError and returned 500. Install node dependencies explicitly with npm ci instead of relying on the asset pipeline to do it as a side effect.
The problem
Aplikácia beží na Rails 7.1.6. Chceme na 8.x (bezpečnostné záplaty, podpora). Upgrade ale neblokujú len samotné Rails — bez zmeny sa nedajú vyriešiť tieto závislosti a zmeny správania:
rails-i18nmal v lockurailties (< 8),view_component3.10activesupport (< 8.0),annotate3.2.0activerecord (< 8.0)(novšia verzia neexistuje).enum status: {…}.config.active_job.queue_adapterzapplication.rb(:good_job), čo by zhodilo job testy.ARRAY[?]skončilo akointeger[] && text[]).ParameterMissing(viditeľné v API).Solution
Postupný upgrade
7.1 → 7.2.4 → 8.0.5.1 → 8.1.4, každý krok samostatný commit aconfig.load_defaultss príslušnýmnew_framework_defaults_*(7.2/8.0/8.1);bin/rails app:updatesom zámerne nespúšťal, zmeny v configu som preniesol ručne.Konkrétne zmeny v kóde/configu:
enum :status, {…}vmessage_drafts_import.rb(keyword forma je v 8.0 preč).config.active_job.queue_adapter = :testv test env +test/helpers/good_job_helper.rbpre testy, ktoré reálne spúšťajú GoodJob frontu (7.2 prestal adaptér prebíjať).ARRAY[?]::integer[]vsearchable/message_thread.rbafilter_subscription.rb+ regresný test (7.2 zmenil typovanie bindov).SidebarMenu#menuskladá menu pre každý render zvlášť — inak ViewComponent 4 padá na znovupoužití inštancie medzi mobilným a desktopovým sidebarom.good_job_control_concurrency_witha API znenieParameterMissingzachované (klientmi viditeľný string).action_controller.escape_json_responses = trueaactive_support.escape_js_separators_in_json = true(Rails 8.1 default jefalse) + regresný test vtest/integration/boxes_api_test.rb, ktorý overuje escapovanie<>&a U+2028/2029. Obe nastavenia sú v Rails 8.2 deprecated, takže bude treba revíziu — je to poznamenané vnew_framework_defaults_8_1.rb.annotate→annotaterb(lib/tasks/annotate_rb.rake+.annotaterb.yml) agood_job4.19 → 4.22 vrátane nových migrácií (indexy +good_job_concurrency_claims) a testuGoodJob.migrated?, ktorý zabráni tichému zaostávaniu schémy pri ďalšom bumpu.Zámerne mimo rozsahu: nemigroval som
db/schema.rbnaslebo a nemenil poradie stĺpcov;public/openapi.yamlostáva bez zmeny. Tento PR neobsahuje Tailwind ani Ruby — tie idú v samostatných PR.Overenie: celá sada na Ruby 3.3.12 (teda bez Ruby upgradu).
Demo
Not applicable— ide o upgrade frameworku bez vizuálnej zmeny. Dôkazom je zelená sada:bin/rails testbin/rails test:systembin/rails test:integration(Počty rastú o nové regresné testy: array-tag scope a JSON escaping v API.)
Poznámka:
test:systemmá občasný pre-existing flake (sign_in_as/export preview timing) — padá rovnako namain, nie je to regresia tohto PR.