{"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-modularizacija-ar-packwerk-i-epizode","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lv\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","title":{"rendered":"Ruby on Rails modul\u0113\u0161ana ar Packwerk Episode I"},"content":{"rendered":"<h2>Ievads<\/h2>\n<p>Lai run\u0101tu par <strong>Packwerk<\/strong>, vispirms ir j\u0101iepaz\u012bstina ar da\u017eiem j\u0113dzieniem.<\/p>\n<ul>\n<li><b>Koh\u0113zija<\/b>: attiecas uz m\u0113rauklu, kas nosaka, cik liel\u0101 m\u0113r\u0101 modu\u013ca vai klases elementi pieder viens otram.<\/li>\n<li><b>Savienojums<\/b>: attiecas uz atkar\u012bbas l\u012bmeni starp modu\u013ciem vai klas\u0113m.<\/li>\n<li><b>Robe\u017eas<\/b>: attiecas uz \u0161\u0137\u0113r\u0161\u013ciem starp <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/what-is-code-refactoring\/\">kods<\/a>. \u0160aj\u0101 gad\u012bjum\u0101 koda robe\u017ea attiecas uz da\u017e\u0101d\u0101m darb\u012bbas jom\u0101m vien\u0101 un taj\u0101 pa\u0161\u0101 datub\u0101z\u0113.<\/li>\n<li><b>Modulariz\u0101cija<\/b>: programmat\u016bras sist\u0113mas sadal\u012b\u0161anas process vair\u0101kos atsevi\u0161\u0137os modu\u013cos, kur katrs modulis darbojas neatkar\u012bgi.<\/li>\n<\/ul>\n<h2>Probl\u0113mas<\/h2>\n<p>K\u0101 zin\u0101ms, <strong><a href=\"https:\/\/thecodest.co\/lv\/blog\/hire-ror-developer\/\">Rub\u012bns<\/a><\/strong> nenodro\u0161ina labu risin\u0101jumu, lai ieviestu kodu robe\u017eas. M\u0113s varam nor\u0101d\u012bt redzam\u012bbu, bet visas atkar\u012bbas tiks iel\u0101d\u0113tas glob\u0101laj\u0101 v\u0101rdu telp\u0101. Liel\u0101s vai monol\u012bt\u0101s lietojumprogramm\u0101s \u0161is robe\u017eu tr\u016bkums rada \u0161\u0101das probl\u0113mas.<\/p>\n<ul>\n<li>Zema koh\u0113zija,<\/li>\n<li>Augsta sakabes pak\u0101pe, <\/li>\n<li>Spageti kods.<\/li>\n<\/ul>\n<p>M\u0113\u0123inot modul\u0113t Shopify monol\u012btu un ieviest robe\u017eas, tika izm\u0113\u0123in\u0101ti da\u017e\u0101di risin\u0101jumi, ta\u010du gaid\u012btie rezult\u0101ti netika sasniegti:<br \/>\n- Priv\u0101to konstantu iestat\u012b\u0161ana,<br \/>\n- Robe\u017eu noteik\u0161ana ar d\u0101rgakme\u0146iem,<br \/>\n- Testu izmanto\u0161ana, lai nov\u0113rstu starpkomponentu saist\u012bbas,<br \/>\n- Izmantojot Ruby modul\u0101cijas d\u0101rgakmeni,<br \/>\n- Rad\u012bt <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/microservices\/\">mikroservisi<\/a>.<\/p>\n<p>Izmantojot visas iepriek\u0161\u0113jos m\u0113\u0123in\u0101jumos g\u016bt\u0101s zin\u0101\u0161anas, vi\u0146i nol\u0113ma izveidot savu r\u012bku: <strong>Packwerk<\/strong>.<\/p>\n<h2>Packwerk<\/h2>\n<h3>Kas ir Packwerk?<\/h3>\n<p><strong>Packwerk<\/strong> ir statisk\u0101s anal\u012bzes r\u012bks, ko izmanto, lai ieviestu robe\u017eas starp grupu <strong>Rub\u012bns<\/strong> failus ar nosaukumu <strong>paketes<\/strong>.<\/p>\n<h3>Kas ir pakete?<\/h3>\n<p>A <strong>pakete<\/strong> ir mape, kur\u0101 ir autom\u0101tiski iel\u0101d\u0113ts kods. Shopify <a href=\"https:\/\/thecodest.co\/lv\/blog\/how-to-hire-the-best-outsourced-development-team-for-a-scaleup\/\">komanda<\/a> mudina, veidojot paketes, izmantot lab\u0101ko dizaina praksi.<br \/>\n- Mums vajadz\u0113tu iepakot kop\u0101 lietas, kur\u0101m ir augsta funkcionalit\u0101te <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cohesion_(computer_science)\" rel=\"nofollow\">koh\u0113zija<\/a>,<\/p>\n<ul>\n<li>Paket\u0113m sav\u0101 starp\u0101 j\u0101b\u016bt sam\u0113r\u0101 br\u012bvi saist\u012bt\u0101m.<\/li>\n<\/ul>\n<h3>Robe\u017ep\u0101rbau\u017eu veidi<\/h3>\n<p>M\u0113s varam ieviest priv\u0101tuma un atkar\u012bbu robe\u017eas, p\u0101rbaud\u012bt robe\u017eu p\u0101rk\u0101pumus un ciklisk\u0101s atkar\u012bbas.<\/p>\n<h2>Packwerk praks\u0113<\/h2>\n<p>Neviens konkr\u0113ts veids, k\u0101 struktur\u0113t vai p\u0101rstruktur\u0113t lietojumprogrammu, veidojot paketes, nav noteikts. \u0160aj\u0101 rakst\u0101 m\u0113s izmantosim pieeju, ko iesaka<br \/>\nStephan Hagemann in <em>Pak\u0101peniska modul\u0113\u0161ana Ruby on <a href=\"https:\/\/thecodest.co\/lv\/blog\/ways-to-increase-your-rails-performance\/\">Sliedes<\/a><\/em>.<\/p>\n<h3>Izv\u0113lieties projektu<\/h3>\n<p>Varat izveidot jaunu <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/why-do-projects-fail\/\">projekts<\/a> vai izv\u0113lieties k\u0101du no saviem projektiem. Es nol\u0113mu izmantot atv\u0113rt\u0101 koda projektu ar nosaukumu  <a href=\"https:\/\/github.com\/codetriage\/codetriage\" rel=\"nofollow\">CodeTriage<\/a>. Ir svar\u012bgi piemin\u0113t, ka mums ir nepiecie\u0161ama Rails 6 lietojumprogramma, jo <strong>Packwerk<\/strong> izmanto Zeitwerk.<\/p>\n<h3>Inicializ\u0113t Packwerk<\/h3>\n<p>Pirmk\u0101rt, mums ir nepiecie\u0161ams, lai pievienotu gem m\u016bsu Gem failu, piem\u0113ram, k\u0101 <code>d\u0101rgakmens 'packwerk'<\/code> un p\u0113c tam palaidiet <code>komplekts<\/code>konsol\u0113. Tad m\u0113s esam gatavi inicializ\u0113t gem darbojas <code>packwerk init<\/code>.<\/p>\n<p>P\u0113c tam m\u0113s redzam, ka <strong>Packwerk<\/strong> \u0123ener\u0113ti tr\u012bs faili <a href=\"https:\/\/thecodest.co\/lv\/blog\/why-us-companies-are-opting-for-polish-developers\/\">mums<\/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> ir konfigur\u0101cijas fails <strong>Packwerk<\/strong> kur m\u0113s defin\u0113sim iek\u013cautos un izsl\u0113gtos failus, uzskait\u012bsim iel\u0101des ce\u013cus, defin\u0113sim inflections failu un citas lietas;<\/p>\n<p><em>package.yml<\/em> ir paketes konfigur\u0101cijas fails. \u0160aj\u0101 fail\u0101 m\u0113s pievienosim m\u016bsu paketes robe\u017eu konfigur\u0101ciju. Jebkura mape ar package.yml tiks atpaz\u012bta k\u0101 pakete ar <strong>Packwerk<\/strong>. Tas ir viss, <strong>Packwerk<\/strong> izveidoja m\u016bsu pirmo<br \/>\npaketi, un m\u0113s to saucam par <em>saknes<\/em> iepakojums.<\/p>\n<p><em>inflections.yml<\/em> ir vieta, kur m\u0113s izvietosim m\u016bsu piel\u0101gotos loc\u012bjumus un akron\u012bmus, ja m\u0113s tos izmantosim.<\/p>\n<p>Pla\u0161\u0101ku inform\u0101ciju par failiem un to konfigur\u0101ciju var atrast sada\u013c\u0101<br \/>\n<a href=\"https:\/\/github.com\/Shopify\/packwerk\" rel=\"nofollow\">Packwerk<\/a>.<\/p>\n<h3>Packwerk \u012bpa\u0161\u012bbas<\/h3>\n<p>Lai modul\u0101cija darbotos, mums ir nepiecie\u0161amas tr\u012bs pamat\u012bpa\u0161\u012bbas: <em>nosaukts konteiners<\/em>, t\u0101 <em>saturs<\/em>, un skaidri <em>atkar\u012bbas<\/em> par citiem <em>konteineri<\/em>. T\u0101tad defin\u0113sim \u0161\u012bs \u012bpa\u0161\u012bbas <strong>Packwerk<\/strong>:<\/p>\n<ul>\n<li>\n<p><b>Nosaukums<\/b>: Paketes nosaukums ir t\u0101s relat\u012bvais ce\u013c\u0161 no paketes saknes.<br \/>\npieteikums.<\/p>\n<\/li>\n<li>\n<p><b>Saturs<\/b>: Kad m\u0113s ievietojam package.yml map\u0113, visi map\u0113 eso\u0161ie faili k\u013c\u016bst par paketes saturu.<\/p>\n<\/li>\n<li>\n<p><b>Atkar\u012bbas<\/b>: M\u0113s varam defin\u0113t atkar\u012bbas no cit\u0101m pakotn\u0113m, pievienojot atkar\u012bbu atsl\u0113gu uz <em>package.yml<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>V\u0113l viens fails, kas nav iek\u013cauts p\u0113c noklus\u0113juma, bet ir ieteicams, ir README. Taj\u0101 ir svar\u012bgi sniegt inform\u0101ciju par paketes lieto\u0161anu.<\/p>\n<p>I epizodes beigas <\/p>\n<p><a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/cta_2.jpeg\" alt=\"Konsult\u0101cijas par digit\u0101lo produktu izstr\u0101di\" \/><\/a><\/p>\n<p><strong>Las\u012bt vair\u0101k<\/strong><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. K\u0101 ir ar veiktsp\u0113ju?<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Sliedes un citi transporta l\u012bdzek\u013ci<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">Rails att\u012bst\u012bba ar TMUX, Vim, Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Cilv\u0113kiem ir gr\u016bti saskat\u012bt probl\u0113mas kopainu, neveltot tam daudz laika un p\u016b\u013cu. \u012apa\u0161i tas notiek, str\u0101d\u0101jot ar liel\u0101m un sare\u017e\u0123\u012bt\u0101m lietojumprogramm\u0101m. K\u0101das ir manu izmai\u0146u blakuspar\u0101d\u012bbas? K\u0101p\u0113c \u0161\u012b rindi\u0146a \u0161eit ietekm\u0113 att\u0101las datub\u0101zes da\u013cas testus? Ide\u0101ls vai piln\u012bgs risin\u0101jums nepast\u0101v, ta\u010du Shopify n\u0101ca klaj\u0101 ar r\u012bku, kas, iesp\u0113jams, pal\u012bdz\u0113s jums un j\u016bsu 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\/lv\/emuars\/ruby-on-rails-modularizacija-ar-packwerk-i-epizode\/\" \/>\n<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/emuars\/ruby-on-rails-modularizacija-ar-packwerk-i-epizode\/\" \/>\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 min\u016btes\" \/>\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\":\"lv-LV\",\"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\":\"lv-LV\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lv-LV\",\"@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\":\"lv-LV\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lv-LV\",\"@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\":\"lv-LV\",\"@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\\\/lv\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby on Rails modul\u0101cija ar Packwerk I epizode - 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\/lv\/emuars\/ruby-on-rails-modularizacija-ar-packwerk-i-epizode\/","og_locale":"lv_LV","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\/lv\/emuars\/ruby-on-rails-modularizacija-ar-packwerk-i-epizode\/","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 min\u016btes"},"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":"lv-LV","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 modul\u0101cija ar Packwerk I epizode - 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":"lv-LV","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"]}]},{"@type":"ImageObject","inLanguage":"lv-LV","@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":"lv-LV"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lv-LV","@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":"lv-LV","@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\/lv\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/comments?post=3564"}],"version-history":[{"count":5,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3564\/revisions"}],"predecessor-version":[{"id":7982,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3564\/revisions\/7982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media\/3565"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media?parent=3564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/categories?post=3564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/tags?post=3564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}