{"id":3564,"date":"2022-01-05T08:16:52","date_gmt":"2022-01-05T08:16:52","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"},"modified":"2026-04-28T14:05:35","modified_gmt":"2026-04-28T14:05:35","slug":"ruby-on-rails-moduliarizacija-su-packwerk-epizodas-i","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lt\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","title":{"rendered":"Ruby on Rails moduliavimas su \"Packwerk\" I epizodas"},"content":{"rendered":"<h2>\u012evadas<\/h2>\n<p>Norint kalb\u0117ti apie <strong>Packwerk<\/strong>, pirmiausia turime pristatyti kelet\u0105 s\u0105vok\u0173.<\/p>\n<ul>\n<li><b>Sanglauda<\/b>: rei\u0161kia priemon\u0119, rodan\u010di\u0105, kiek modulio ar klas\u0117s elementai priklauso vieni kitiems.<\/li>\n<li><b>Jungtis<\/b>: rei\u0161kia priklausomyb\u0117s tarp moduli\u0173 ar klasi\u0173 lyg\u012f.<\/li>\n<li><b>Ribos<\/b>: rei\u0161kia kli\u016btis tarp <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/what-is-code-refactoring\/\">kodas<\/a>. \u0160iuo atveju kodo riba rei\u0161kia skirtingas tos pa\u010dios kod\u0173 baz\u0117s problemines sritis.<\/li>\n<li><b>Modulavimas<\/b>: programin\u0117s \u012frangos sistemos padalijimo \u012f kelis atskirus modulius procesas, kai kiekvienas modulis veikia savaranki\u0161kai.<\/li>\n<\/ul>\n<h2>Problemos<\/h2>\n<p>Kaip \u017einome, <strong><a href=\"https:\/\/thecodest.co\/lt\/blog\/hire-ror-developer\/\">Ruby<\/a><\/strong> nepateikia gero sprendimo, kaip u\u017etikrinti kodekso rib\u0173 laikym\u0105si. Galime nurodyti matomum\u0105, ta\u010diau visos priklausomyb\u0117s bus \u012fkeltos \u012f pasaulin\u0119 vard\u0173 erdv\u0119. Didel\u0117se arba monolitin\u0117se programose d\u0117l tokio rib\u0173 nebuvimo kyla \u0161i\u0173 problem\u0173.<\/p>\n<ul>\n<li>Ma\u017ea sanglauda,<\/li>\n<li>Auk\u0161tas sukabinimo lygis, <\/li>\n<li>Spage\u010di\u0173 kodas.<\/li>\n<\/ul>\n<p>Bandydami moduliuoti \"Shopify\" monolit\u0105 ir nustatyti ribas, jie i\u0161band\u0117 \u012fvairius sprendimus, ta\u010diau nepasiek\u0117 laukiam\u0173 rezultat\u0173:<br \/>\n- Priva\u010di\u0173 konstant\u0173 nustatymas,<br \/>\n- Rib\u0173 nustatymas per brangakmenius,<br \/>\n- Test\u0173 naudojimas siekiant i\u0161vengti tarpkomponentini\u0173 asociacij\u0173,<br \/>\n- Naudojant \u2018Ruby\" moduliacijos brangakmen\u012f,<br \/>\n- K\u016brimas <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/microservices\/\">mikroservisai<\/a>.<\/p>\n<p>Pasinaudoj\u0119 visomis ankstesni\u0173 bandym\u0173 \u017einiomis, jie nusprend\u0117 sukurti savo \u012frank\u012f: <strong>Packwerk<\/strong>.<\/p>\n<h2>Packwerk<\/h2>\n<h3>Kas yra \"Packwerk\"?<\/h3>\n<p><strong>Packwerk<\/strong> yra statin\u0117s analiz\u0117s \u012frankis, naudojamas siekiant nustatyti ribas tarp grupi\u0173 <strong>Ruby<\/strong> failai, vadinami <strong>paketai<\/strong>.<\/p>\n<h3>Kas yra paketas?<\/h3>\n<p>A <strong>paketas<\/strong> yra aplankas su automati\u0161kai \u012fkeltu kodu. \"Shopify <a href=\"https:\/\/thecodest.co\/lt\/blog\/how-to-hire-the-best-outsourced-development-team-for-a-scaleup\/\">komanda<\/a> ragina kuriant paketus taikyti geriausi\u0105 dizaino praktik\u0105.<br \/>\n- Tur\u0117tume kartu supakuoti daiktus, kurie yra labai funkcional\u016bs. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cohesion_(computer_science)\" rel=\"nofollow\">sanglauda<\/a>,<\/p>\n<ul>\n<li>Paketai tur\u0117t\u0173 b\u016bti palyginti laisvai susieti tarpusavyje.<\/li>\n<\/ul>\n<h3>Ribini\u0173 patikrinim\u0173 tipai<\/h3>\n<p>Galime u\u017etikrinti privatumo ir priklausomyb\u0117s rib\u0173 laikym\u0105si, tikrinti rib\u0173 pa\u017eeidimus ir ciklines priklausomybes.<\/p>\n<h2>Packwerk \u012f praktik\u0105<\/h2>\n<p>Kuriant paketus n\u0117ra vieno konkretaus b\u016bdo, kaip strukt\u016brizuoti ar pertvarkyti program\u0105. \u0160iame straipsnyje vadovausim\u0117s metodu, kur\u012f pasi\u016bl\u0117<br \/>\nStephan Hagemann in <em>Laipsni\u0161kas \"Ruby on\" moduliavimas <a href=\"https:\/\/thecodest.co\/lt\/blog\/ways-to-increase-your-rails-performance\/\">B\u0117giai<\/a><\/em>.<\/p>\n<h3>Pasirinkite projekt\u0105<\/h3>\n<p>Galite sukurti nauj\u0105 <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/why-do-projects-fail\/\">projektas<\/a> arba pasirinkite vien\u0105 i\u0161 savo projekt\u0173. Nusprend\u017eiau naudoti atvirojo kodo projekt\u0105, vadinam\u0105  <a href=\"https:\/\/github.com\/codetriage\/codetriage\" rel=\"nofollow\">CodeTriage<\/a>. Svarbu pamin\u0117ti, kad mums reikia Rails 6 programos, nes <strong>Packwerk<\/strong> naudoja Zeitwerk.<\/p>\n<h3>Inicializuoti \"Packwerk<\/h3>\n<p>Pirma, turime prid\u0117ti gem \u012f savo Gemfile kaip <code>brangakmenis 'packwerk'<\/code> ir paleiskite <code>paketas<\/code>konsol\u0117je. Tuomet esame pasireng\u0119 inicializuoti brangakmen\u012f <code>packwerk init<\/code>.<\/p>\n<p>Po to pastebime, kad <strong>Packwerk<\/strong> sugeneruoti trys failai <a href=\"https:\/\/thecodest.co\/lt\/blog\/why-us-companies-are-opting-for-polish-developers\/\">mus<\/a>:<\/p>\n<ul>\n<li>\n<p><em>packwerk.yml<\/em><\/p>\n<\/li>\n<li>\n<p><em>package.yml<\/em><\/p>\n<\/li>\n<li>\n<p><em>inflections.yml<\/em><\/p>\n<\/li>\n<\/ul>\n<p><em>packwerk.yml<\/em> yra konfig\u016bracijos failas <strong>Packwerk<\/strong> kuriame, be kita ko, apibr\u0117\u0161ime \u012ftrauktus ir ne\u012ftrauktus failus, nurodysime \u012fk\u0117limo kelius, apibr\u0117\u0161ime inflekcij\u0173 fail\u0105;<\/p>\n<p><em>package.yml<\/em> yra paketo konfig\u016bracijos failas. \u0160iame faile prid\u0117sime m\u016bs\u0173 paketo rib\u0173 konfig\u016bracij\u0105. Bet kuris aplankas su package.yml bus atpa\u017e\u012fstamas kaip paketas <strong>Packwerk<\/strong>. \u0160tai ir viskas, <strong>Packwerk<\/strong> suk\u016br\u0117me pirm\u0105j\u012f<br \/>\npaket\u0105 ir vadiname j\u012f <em>root<\/em> pakuot\u0117.<\/p>\n<p><em>inflections.yml<\/em> \u010dia patalpinsime savo pasirinktinius linksnius ir akronimus, jei juos naudosime.<\/p>\n<p>Daugiau informacijos apie failus ir j\u0173 konfig\u016bracij\u0105 rasite<br \/>\n<a href=\"https:\/\/github.com\/Shopify\/packwerk\" rel=\"nofollow\">Packwerk<\/a>.<\/p>\n<h3>\"Packwerk\" savyb\u0117s<\/h3>\n<p>Kad moduliavimas veikt\u0173, reikia trij\u0173 pagrindini\u0173 savybi\u0173: <em>\u012fvardytas konteineris<\/em>, jos <em>turinys<\/em>, ir ai\u0161kiai <em>priklausomyb\u0117s<\/em> d\u0117l kit\u0173 <em>konteineriai<\/em>. Taigi apibr\u0117\u017ekime \u0161ias savybes <strong>Packwerk<\/strong>:<\/p>\n<ul>\n<li>\n<p><b>Pavadinimas<\/b>: Paketo pavadinimas yra jo santykinis kelias nuo \u0161aknies<br \/>\ntaikymas.<\/p>\n<\/li>\n<li>\n<p><b>Turinys<\/b>: \u012ed\u0117jus package.yml \u012f aplank\u0105, visi aplanke esantys failai tampa paketo turiniu.<\/p>\n<\/li>\n<li>\n<p><b>Priklausomyb\u0117s<\/b>: Galime apibr\u0117\u017eti priklausomybes nuo kit\u0173 paket\u0173, prid\u0117dami priklausomybi\u0173 rakt\u0105 \u012f <em>package.yml<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>Kitas failas, kuris pagal nutyl\u0117jim\u0105 ne\u012ftrauktas, bet rekomenduojamas, yra README. Jame svarbu pateikti informacij\u0105 apie paketo naudojim\u0105.<\/p>\n<p>I epizodo pabaiga <\/p>\n<p><a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/cta_2.jpeg\" alt=\"Skaitmenini\u0173 produkt\u0173 k\u016brimo konsultacijos\" \/><\/a><\/p>\n<p><strong>Skaityti daugiau<\/strong><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">\"GraphQL Ruby\". O kaip d\u0117l na\u0161umo?<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">B\u0117giai ir kitos transporto priemon\u0117s<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">\"Rails\" k\u016brimas naudojant TMUX, \"Vim\", Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>\u017dmon\u0117ms sunku pamatyti bendr\u0105 problemos vaizd\u0105, neskiriant tam daug laiko ir pastang\u0173. Taip atsitinka ypa\u010d dirbant su didel\u0117mis ir sud\u0117tingomis programomis. Koks yra mano pakeitim\u0173 \u0161alutinis poveikis? Kod\u0117l \u010dia esanti eilut\u0117 daro \u012ftak\u0105 nutolusios kod\u0173 baz\u0117s dalies testams? Tobulo ar i\u0161samaus sprendimo n\u0117ra, ta\u010diau \"Shopify\" i\u0161leido priemon\u0119, kuri tikriausiai pad\u0117s jums ir j\u016bs\u0173 team.<\/p>","protected":false},"author":2,"featured_media":3565,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3564","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ruby on Rails modularization with Packwerk Episode I - The Codest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/lt\/tinklarastis\/ruby-on-rails-moduliarizacija-su-packwerk-epizodas-i\/\" \/>\n<meta property=\"og:locale\" content=\"lt_LT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby on Rails modularization with Packwerk Episode I\" \/>\n<meta property=\"og:description\" content=\"Humans find it difficult to see the big picture of a problem without devoting a lot of time and effort. This happens especially while working with large and complex applications. What are the side effects of my changes? Why is this line here affecting the tests of a remote part of the codebase? A perfect or complete solution does not exist, but Shopify came out with a tool that will probably help you and your team.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/lt\/tinklarastis\/ruby-on-rails-moduliarizacija-su-packwerk-epizodas-i\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-05T08:16:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-28T14:05:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minut\u0117s\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Ruby on Rails modularization with Packwerk Episode I\",\"datePublished\":\"2022-01-05T08:16:52+00:00\",\"dateModified\":\"2026-04-28T14:05:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"},\"wordCount\":650,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"lt-LT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\",\"name\":\"Ruby on Rails modularization with Packwerk Episode I - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"datePublished\":\"2022-01-05T08:16:52+00:00\",\"dateModified\":\"2026-04-28T14:05:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#breadcrumb\"},\"inLanguage\":\"lt-LT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby on Rails modularization with Packwerk Episode I\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"lt-LT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/lt\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby on Rails moduliavimas su \"Packwerk\" I epizodas - The Codest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/lt\/tinklarastis\/ruby-on-rails-moduliarizacija-su-packwerk-epizodas-i\/","og_locale":"lt_LT","og_type":"article","og_title":"Ruby on Rails modularization with Packwerk Episode I","og_description":"Humans find it difficult to see the big picture of a problem without devoting a lot of time and effort. This happens especially while working with large and complex applications. What are the side effects of my changes? Why is this line here affecting the tests of a remote part of the codebase? A perfect or complete solution does not exist, but Shopify came out with a tool that will probably help you and your team.","og_url":"https:\/\/thecodest.co\/lt\/tinklarastis\/ruby-on-rails-moduliarizacija-su-packwerk-epizodas-i\/","og_site_name":"The Codest","article_published_time":"2022-01-05T08:16:52+00:00","article_modified_time":"2026-04-28T14:05:35+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"4 minut\u0117s"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Ruby on Rails modularization with Packwerk Episode I","datePublished":"2022-01-05T08:16:52+00:00","dateModified":"2026-04-28T14:05:35+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"},"wordCount":650,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","articleSection":["Software Development"],"inLanguage":"lt-LT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","url":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","name":"Ruby on Rails moduliavimas su \"Packwerk\" I epizodas - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","datePublished":"2022-01-05T08:16:52+00:00","dateModified":"2026-04-28T14:05:35+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#breadcrumb"},"inLanguage":"lt-LT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"]}]},{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Ruby on Rails modularization with Packwerk Episode I"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"lt-LT"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/lt\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/comments?post=3564"}],"version-history":[{"count":5,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3564\/revisions"}],"predecessor-version":[{"id":7982,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3564\/revisions\/7982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media\/3565"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media?parent=3564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/categories?post=3564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/tags?post=3564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}