← Extractions

How To Package A Rails Engine — Generation To Automation (wroclove.rb 2022)

Adrian Marin, author of Avo, walks through the full lifecycle of packaging a Rails engine: generating a mountable engine, writing a gemspec, building gems in isolation with Docker, publishing to RubyGems, versioning with the bump gem, automating tests, linting, PR labeling, release notes and releases via GitHub Actions, and pre-compiling engine assets with esbuild/Tailwind behind a Rack::Static middleware. Q&A covers engines vs namespaces in monoliths, Webpacker-based engines, and avoiding model duplication across engines.

Model
claude-opus-4-7
Ingestion
b3cca4fd
Input tokens
420,903
fresh
291,363
cached
116,586
cache write
12,954
Output tokens
17,654
Duration
272.9s
Roundtrips
10
Tool calls
26
Cost
$0.00
Nodes/edges extracted
38 / 60
Read set (nodes/edges)
129 / 5

Nodes (38)

create jsbundling-rails tool
kind (empty) tool
name (empty) jsbundling-rails
slug (empty) jsbundling-rails
attrs (empty) {"category" => "library"}
description (empty) Rails gem that standardizes the integration between Rails and JavaScript bundlers such as esbuild. Used in the engine...
short_description (empty) Rails gem integrating esbuild/rollup/webpack bundlers via npm scripts.
update Adrian Marin person
attrs (empty) {"handle" => "adrianthedev", "website" => "adrianthedev.com", "nationality" => "Romanian"}
description Conference speaker. Romanian Ruby on Rails developer and entrepreneur, creator of Avo — an application-building framework on top of Rails...
short_description Conference speaker. Romanian Ruby developer, creator of the Avo admin framework.
update How To Package A Rails Engine Generation To Automation talk
attrs {"type" => "talk"} {"date" => "2022-03-11", "type" => "talk"}
description Talk at wroclove.rb 2022. Adrian Marin's wroclove.rb 2022 talk walking end-to-end through packaging a Rails engine as a distributable gem. Cove...
short_description Talk at wroclove.rb 2022. Adrian Marin's wroclove.rb 2022 talk on building, releasing, and automating Rails engine gems.
update Avo tool
attrs {"category" => "library"} {"author" => "Adrian Marin", "website" => "avohq.io", "category" => "library"}
description Rails admin panel gem mentioned alongside Active Admin. Magic-heavy: it tries to discover models and auto-generate a ... Application-building framework built on top of Ruby on Rails, authored by Adrian Marin, that helps developers build a...
create Rails Engine concept
kind (empty) concept
name (empty) Rails Engine
slug (empty) rails-engine
attrs (empty) {"category" => "architecture"}
description (empty) Rails feature providing a miniature Rails application — with its own routes, models, controllers, views, helpers and ...
short_description (empty) Miniature Rails application mountable inside a host Rails app.
create RubyGems tool
kind (empty) tool
name (empty) RubyGems
slug (empty) rubygems
attrs (empty) {"category" => "service"}
description (empty) Official Ruby package hosting and distribution system. Gems are built via the `gem` utility, configured through a `.g...
short_description (empty) Official package registry and distribution system for Ruby libraries.
create gemspec concept
kind (empty) concept
name (empty) gemspec
slug (empty) gemspec
attrs (empty) {"category" => "practice"}
description (empty) Manifest file shipped with every Ruby gem. Describes package identity (name, version, author, summary, description), ...
short_description (empty) Ruby gem manifest file declaring metadata, files and dependencies.
create bump gem tool
kind (empty) tool
name (empty) bump gem
slug (empty) bump-gem
attrs (empty) {"category" => "library"}
description (empty) Ruby utility that increments the version in an engine/gem's `version.rb` (pre-release, minor, major, or patch), updat...
short_description (empty) Ruby gem that automates semantic version bumps, commits and tags.
create Pundit tool
kind (empty) tool
name (empty) Pundit
slug (empty) pundit
attrs (empty) {"category" => "library"}
description (empty) Popular Ruby authorization gem; used in Adrian's talk as the example runtime dependency declared in an engine's gemsp...
short_description (empty) Minimal authorization Ruby gem using policy classes.
create esbuild tool
kind (empty) tool
name (empty) esbuild
slug (empty) esbuild
attrs (empty) {"category" => "tool"}
description (empty) JavaScript bundler used in the talk via the jsbundling-for-rails script pattern. A `build.js` invokes esbuild to bund...
short_description (empty) Extremely fast JavaScript/TypeScript bundler.
create Tailwind CSS tool
kind (empty) tool
name (empty) Tailwind CSS
slug (empty) tailwind-css
attrs (empty) {"category" => "framework"}
description (empty) Utility-first CSS framework used in the talk to compile a single `admin.tailwind.css` entry file into `public/admin-a...
short_description (empty) Utility-first CSS framework.
create Rack::Static tool
kind (empty) tool
name (empty) Rack::Static
slug (empty) rack-static
attrs (empty) {"category" => "library"}
description (empty) Rack middleware added to a Rails Engine class (`config.app_middleware.use Rack::Static, ...`) to map requests for `/a...
short_description (empty) Rack middleware serving static files from a given directory.
create reviewdog tool
kind (empty) tool
name (empty) reviewdog
slug (empty) reviewdog
attrs (empty) {"category" => "tool"}
description (empty) Automated code-review tool, available as a GitHub Action, that runs linters/analyzers and reports findings as inline ...
short_description (empty) Automated code-review tool posting linter output as PR comments/suggestions.
create Standard RB tool
kind (empty) tool
name (empty) Standard RB
slug (empty) standard-rb
attrs (empty) {"category" => "tool"}
description (empty) Ruby linter/formatter with a single, opinionated style and zero configuration. Used in Adrian's engine CI via reviewd...
short_description (empty) Opinionated Ruby style checker with zero configuration.
create ESLint tool
kind (empty) tool
name (empty) ESLint
slug (empty) eslint
attrs (empty) {"category" => "tool"}
description (empty) JavaScript/TypeScript linter. Used in the engine's CI via reviewdog's eslint action to enforce JS style and catch err...
short_description (empty) JavaScript linter with configurable rule sets.
create Release Drafter tool
kind (empty) tool
name (empty) Release Drafter
slug (empty) release-drafter
attrs (empty) {"category" => "tool"}
description (empty) GitHub Action that, on every merge to main, diffs commits since the last release, collects merged pull requests, and ...
short_description (empty) GitHub Action that auto-generates categorized release notes from merged PRs.
create PR Labeler tool
kind (empty) tool
name (empty) PR Labeler
slug (empty) pr-labeler
attrs (empty) {"category" => "tool"}
description (empty) GitHub Action that runs on pull-request open events and applies labels (feature, chore, fix, refactor, style, test, d...
short_description (empty) GitHub Action that auto-labels pull requests from branch names.
create Codecov tool
kind (empty) tool
name (empty) Codecov
slug (empty) codecov
attrs (empty) {"category" => "service"}
description (empty) Hosted code-coverage reporting service. Integrated into Adrian's engine CI via the codecov GitHub Action, which uploa...
short_description (empty) Hosted code-coverage reporting service with GitHub integration.
create actions/checkout tool
kind (empty) tool
name (empty) actions/checkout
slug (empty) actions-checkout
attrs (empty) {"category" => "tool"}
description (empty) Pre-made GitHub Action used at the start of most workflows; knows which ref/PR/commit triggered the run and checks ou...
short_description (empty) Pre-made GitHub Action that checks out the repository at the triggering commit.
create ruby/setup-ruby tool
kind (empty) tool
name (empty) ruby/setup-ruby
slug (empty) ruby-setup-ruby
attrs (empty) {"category" => "tool"}
description (empty) Pre-made GitHub Action that installs Ruby at a version typically provided by the workflow's matrix strategy (e.g. Rub...
short_description (empty) GitHub Action that installs a Ruby version and configures bundler caching.
create actions/upload-artifact tool
kind (empty) tool
name (empty) actions/upload-artifact
slug (empty) actions-upload-artifact
attrs (empty) {"category" => "tool"}
description (empty) Pre-made GitHub Action that packages a given directory (e.g. `spec/dummy/tmp/screenshots`) into an archive attached t...
short_description (empty) GitHub Action archiving files from a job for post-run download.
create GitHub Releases tool
kind (empty) tool
name (empty) GitHub Releases
slug (empty) github-releases
attrs (empty) {"category" => "service"}
description (empty) GitHub feature allowing a release object — with title, body, and uploadable binary assets — to be attached to a git t...
short_description (empty) GitHub feature attaching release notes and assets to git tags.
create CI Matrix Strategy concept
kind (empty) concept
name (empty) CI Matrix Strategy
slug (empty) ci-matrix-strategy
attrs (empty) {"category" => "practice"}
description (empty) GitHub Actions pattern where a job is fanned out across combinations of parameters — e.g. Ruby 3.0/3.1 × Rails 6/7 — ...
short_description (empty) Running CI jobs across combinations of parameters like language/framework versions.
create Build Gems in Docker Isolation concept
kind (empty) concept
name (empty) Build Gems in Docker Isolation
slug (empty) build-gems-in-docker-isolation
attrs (empty) {"category" => "practice"}
description (empty) Practice of running `bundle exec rails build` inside a Docker image built from a clean Ruby base (plus cached heavy n...
short_description (empty) Packaging a Ruby gem inside a Docker build to avoid host-environment contamination.
create Pre-Compile Engine Assets at Build Time concept
kind (empty) concept
name (empty) Pre-Compile Engine Assets at Build Time
slug (empty) pre-compile-engine-assets-at-build-time
attrs (empty) {"category" => "pattern"}
description (empty) Asset-pipeline strategy for packaged Rails engines. Instead of hooking into the host app's asset pipeline (which forc...
short_description (empty) Bundling a Rails engine's CSS/JS at gem build time and serving via Rack::Static.
create Changelog concept
kind (empty) concept
name (empty) Changelog
slug (empty) changelog
attrs (empty) {"category" => "practice"}
description (empty) Record of notable changes published with each release. Options covered in the talk: a `CHANGELOG.md` file committed t...
short_description (empty) Human-readable record of notable changes between releases.
create Short Ruby Newsletter resource
kind (empty) resource
name (empty) Short Ruby Newsletter
slug (empty) short-ruby-newsletter
attrs (empty) {"type" => "blog-post"}
description (empty) Weekly newsletter by Lucian Ghinda summarizing what's happening in the Ruby community on Twitter and elsewhere — deba...
short_description (empty) Weekly roundup of Ruby community activity on Twitter and beyond.
create Lucian Ghinda person
kind (empty) person
name (empty) Lucian Ghinda
slug (empty) lucian-ghinda
description (empty) Ruby developer and author of the Short Ruby Newsletter, a weekly roundup of Ruby community activity. Described as Adr...
short_description (empty) Ruby developer, author of the Short Ruby Newsletter.
create Ruby Romania project
kind (empty) project
name (empty) Ruby Romania
slug (empty) ruby-romania
attrs (empty) {"status" => "active"}
description (empty) Community initiative for Romanian Ruby developers, promoted by Adrian Marin at the end of his wroclove.rb 2022 talk a...
short_description (empty) Community initiative for Romanian Ruby developers.
create Xavier Noria person
kind (empty) person
name (empty) Xavier Noria
slug (empty) xavier-noria
description (empty) Ruby on Rails core contributor, known for his work on autoloading (e.g. Zeitwerk). Referenced by Adrian Marin as a no...
short_description (empty) Ruby on Rails core contributor known for work on autoloading.
create Pre-compile engine assets to shield host apps takeaway
kind (empty) takeaway
name (empty) Pre-compile engine assets to shield host apps
slug (empty) pre-compile-engine-assets-to-shield-host-apps
attrs (empty) {"type" => "recommendation"}
description (empty) Recommendation from Adrian Marin's wroclove.rb 2022 talk: pre-compile your Rails engine's CSS and JavaScript at gem b...
short_description (empty) Ship compiled CSS/JS in the engine so the host app doesn't need your toolchain.
create Build your gem in a Docker container takeaway
kind (empty) takeaway
name (empty) Build your gem in a Docker container
slug (empty) build-your-gem-in-a-docker-container
attrs (empty) {"type" => "recommendation"}
description (empty) Takeaway: running `rails build` inside a Docker image guarantees consistent RAILS_ENV/NODE_ENV and asset versions, av...
short_description (empty) Packaging in Docker isolates the build from your local environment.
create Declare gem runtime dependencies in the gemspec takeaway
kind (empty) takeaway
name (empty) Declare gem runtime dependencies in the gemspec
slug (empty) declare-gem-runtime-dependencies-in-the-gemspec
attrs (empty) {"type" => "recommendation"}
description (empty) Takeaway: if your engine depends on another gem (e.g. Pundit) at runtime, declare it with `spec.add_dependency` in th...
short_description (empty) Don't rely on a README — add required gems via spec.add_dependency.
create Automate the whole release workflow takeaway
kind (empty) takeaway
name (empty) Automate the whole release workflow
slug (empty) automate-the-whole-release-workflow
attrs (empty) {"type" => "recommendation"}
description (empty) Takeaway: the manual flow (branch → PR → merge → pull main → bump → build → push → publish → update changelog) is tir...
short_description (empty) Use GitHub Actions to test, lint, label, draft notes, and publish gems.
create Be kind and build useful things takeaway
kind (empty) takeaway
name (empty) Be kind and build useful things
slug (empty) be-kind-and-build-useful-things
attrs (empty) {"type" => "insight"}
description (empty) Adrian Marin's closing call to action at wroclove.rb 2022: be awesome — go build useful things, share them with other...
short_description (empty) Adrian's closing call to build useful software, share it, and be kind.
create Engines vs namespaces for splitting a growing monolith question
kind (empty) question
name (empty) Engines vs namespaces for splitting a growing monolith
slug (empty) engines-vs-namespaces-for-splitting-a-growing-monolith
attrs (empty) {"answer_summary" => "It depends. Use engines for clearly first-class domains; start with namespaces otherwise, but a...
description (empty) Audience question: when building another application inside an existing Rails monolith that may grow and need to be e...
short_description (empty) Q&A on when to use a Rails engine instead of a namespace for a new app inside a monolith.
create Packaging a Rails engine that uses Webpacker question
kind (empty) question
name (empty) Packaging a Rails engine that uses Webpacker
slug (empty) packaging-a-rails-engine-that-uses-webpacker
attrs (empty) {"answer_summary" => "Yes — Avo did it. Use the same dual approach (hook into host pipeline for dev, pre-compile at b...
description (empty) Audience question: can you package a Rails engine that uses Webpacker, and can the host app also have Webpacker? Adri...
short_description (empty) Q&A on having Webpacker both in a host app and in a packaged engine.
create Avoiding model duplication across engines question
kind (empty) question
name (empty) Avoiding model duplication across engines
slug (empty) avoiding-model-duplication-across-engines
attrs (empty) {"answer_summary" => "Extract shared code into modules/concerns and include it across engines, or skip engine-owned m...
description (empty) Audience question: in the marketplace example with buyer and seller engines, how do you avoid duplicating models? Adr...
short_description (empty) Q&A on sharing models between buyer and seller engines.

Edges (60)

create Adrian Marinattendedwroclove.rb 2022
context (empty) Speaker at the conference.
relation (empty) attended
source_node_id (empty) 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) cfc5cfd3-25a6-46c2-8b5d-626986c71c24
create Packaging a Rails engine that uses Webpackerasked_atHow To Package A Rails Engine Generation To Automation
context (empty) Asked during the Q&A of this talk.
relation (empty) asked_at
source_node_id (empty) fa735322-95bc-4b5c-9aa7-6a194cb31afd
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
update Adrian MarinauthoredHow To Package A Rails Engine Generation To Automation
context (empty) Adrian Marin delivered this talk at wroclove.rb 2022.
update How To Package A Rails Engine Generation To Automationpresented_atwroclove.rb 2022
context (empty) Talk presented at wroclove.rb 2022.
create Adrian Marinworks_onAvo
attrs (empty) {"role" => "author"}
context (empty) Adrian is the author of Avo.
relation (empty) works_on
source_node_id (empty) 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
create Adrian Marinworks_onRuby Romania
attrs (empty) {"role" => "organizer"}
context (empty) Adrian promotes Ruby Romania as a new Romanian Ruby community he is helping set up.
relation (empty) works_on
source_node_id (empty) 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) cd2395dc-424f-4084-9741-516354db48bc
create Adrian MarinrecommendsShort Ruby Newsletter
context (empty) Adrian shouts out the Short Ruby Newsletter at the end of his talk.
relation (empty) recommends
source_node_id (empty) 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) 2edf12bc-72b7-4f48-8716-80eccabe564d
create Adrian MarinrecommendsRuby Romania
context (empty) Adrian invites Romanian Ruby developers watching the talk to join Ruby Romania.
relation (empty) recommends
source_node_id (empty) 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) cd2395dc-424f-4084-9741-516354db48bc
create Lucian GhindaauthoredShort Ruby Newsletter
context (empty) Lucian Ghinda writes the Short Ruby Newsletter.
relation (empty) authored
source_node_id (empty) 147aedda-80f5-4e57-8dd7-806a57977193
target_node_id (empty) 2edf12bc-72b7-4f48-8716-80eccabe564d
create How To Package A Rails Engine Generation To AutomationaboutRails Engine
context (empty) The talk's core subject is how to build, ship, and maintain Rails engines.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create How To Package A Rails Engine Generation To AutomationaboutAvo
context (empty) Avo is the running example throughout the talk.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
create How To Package A Rails Engine Generation To AutomationaboutRubyGems
context (empty) Talk covers publishing engines as gems on RubyGems.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) c7ef9d2b-d24d-4674-9ffa-b77e122c7044
create How To Package A Rails Engine Generation To Automationaboutgemspec
context (empty) Talk walks through the gemspec as the gem's manifest.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) fc4368bd-58d0-484f-ac2e-2a406d12d977
create How To Package A Rails Engine Generation To AutomationaboutGitHub Actions
context (empty) Entire automation section uses GitHub Actions.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) cab3bb4f-ed74-4df5-8a84-0caa6f55601c
create How To Package A Rails Engine Generation To AutomationaboutDocker
context (empty) Docker is used to build gems in isolation.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create How To Package A Rails Engine Generation To Automationaboutbump gem
context (empty) The bump gem is recommended for automating version bumps, commits, and tags.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 673ab608-b90f-4dbe-8f7b-5840cd16348c
create How To Package A Rails Engine Generation To AutomationaboutPre-Compile Engine Assets at Build Time
context (empty) Final section of the talk explains compiling engine assets at build time.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) e460ab45-aaf0-48fb-9bea-7adf0415dc48
create How To Package A Rails Engine Generation To AutomationaboutBuild Gems in Docker Isolation
context (empty) Talk explains building gems in Docker for isolation.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) d9e04374-7fc6-476b-84a4-9b7d043214c9
create How To Package A Rails Engine Generation To AutomationaboutCI Matrix Strategy
context (empty) Talk demonstrates a Ruby × Rails matrix for the test workflow.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) c81f0d75-787c-4116-8976-0fc2ab98965c
create How To Package A Rails Engine Generation To AutomationaboutChangelog
context (empty) Talk discusses changelog options for gem releases.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 9aa0a495-fc92-48c0-a4c6-37b23fa87594
create AvousesRuby on Rails
context (empty) Avo is an application-building framework built on top of Rails.
relation (empty) uses
source_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create AvousesRails Engine
context (empty) Avo is distributed as a mountable Rails engine.
relation (empty) uses
source_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Avousesesbuild
context (empty) Avo's engine uses esbuild to pre-compile JavaScript at gem build time.
relation (empty) uses
source_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) 1a1e75c2-83e5-45a5-b860-0bede4e80b8e
create AvousesTailwind CSS
context (empty) Avo's engine uses Tailwind to compile CSS at gem build time.
relation (empty) uses
source_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create AvousesRack::Static
context (empty) Avo's engine registers Rack::Static to expose its pre-compiled assets to the host app.
relation (empty) uses
source_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) 412558a2-d146-4e05-8ce7-55ad8577821f
create Avousesjsbundling-rails
context (empty) Avo's package.json scripts use jsbundling with esbuild for Rails.
relation (empty) uses
source_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
target_node_id (empty) 7953f328-bfd7-45a3-9e50-231782b6dfb5
create Pre-Compile Engine Assets at Build Timerelated_toRack::Static
context (empty) The pattern uses Rack::Static middleware to serve the pre-compiled asset directory from the engine.
relation (empty) related_to
source_node_id (empty) e460ab45-aaf0-48fb-9bea-7adf0415dc48
target_node_id (empty) 412558a2-d146-4e05-8ce7-55ad8577821f
create Pre-Compile Engine Assets at Build Timerelated_toesbuild
context (empty) esbuild compiles JavaScript as part of the build-time asset pipeline.
relation (empty) related_to
source_node_id (empty) e460ab45-aaf0-48fb-9bea-7adf0415dc48
target_node_id (empty) 1a1e75c2-83e5-45a5-b860-0bede4e80b8e
create Pre-Compile Engine Assets at Build Timerelated_toTailwind CSS
context (empty) Tailwind compiles CSS as part of the build-time asset pipeline.
relation (empty) related_to
source_node_id (empty) e460ab45-aaf0-48fb-9bea-7adf0415dc48
target_node_id (empty) ec73c2f6-5a41-41a5-8bc3-17addcf6fa0f
create Build Gems in Docker Isolationrelated_toDocker
context (empty) The isolation pattern is implemented with Docker.
relation (empty) related_to
source_node_id (empty) d9e04374-7fc6-476b-84a4-9b7d043214c9
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create CI Matrix Strategyrelated_toGitHub Actions
context (empty) Matrix strategy is a GitHub Actions workflow feature.
relation (empty) related_to
source_node_id (empty) c81f0d75-787c-4116-8976-0fc2ab98965c
target_node_id (empty) cab3bb4f-ed74-4df5-8a84-0caa6f55601c
create Pre-compile engine assets to shield host appsfrom_talkHow To Package A Rails Engine Generation To Automation
context (empty) Key recommendation from the talk's asset-pipeline section.
relation (empty) from_talk
source_node_id (empty) a1162307-c7ee-4ed0-8041-fa438de05ddb
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
create Build your gem in a Docker containerfrom_talkHow To Package A Rails Engine Generation To Automation
context (empty) Recommendation from the build-isolation section.
relation (empty) from_talk
source_node_id (empty) 5b801b74-0f0b-4fee-a6f8-e9ef79c6b01f
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
create Declare gem runtime dependencies in the gemspecfrom_talkHow To Package A Rails Engine Generation To Automation
context (empty) Recommendation from the gemspec walkthrough.
relation (empty) from_talk
source_node_id (empty) 52cdf60f-1a5f-4b17-a5e1-14e7c905a93a
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
create Automate the whole release workflowfrom_talkHow To Package A Rails Engine Generation To Automation
context (empty) Central recommendation of the talk.
relation (empty) from_talk
source_node_id (empty) eb92c566-27c7-4e48-b9bb-288877af2c60
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
create Be kind and build useful thingsfrom_talkHow To Package A Rails Engine Generation To Automation
context (empty) Closing call to action of the talk.
relation (empty) from_talk
source_node_id (empty) 73b7048a-8df0-404b-be58-7ee6b7eea998
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
create Pre-compile engine assets to shield host appsaboutPre-Compile Engine Assets at Build Time
context (empty) The takeaway names and recommends this pattern.
relation (empty) about
source_node_id (empty) a1162307-c7ee-4ed0-8041-fa438de05ddb
target_node_id (empty) e460ab45-aaf0-48fb-9bea-7adf0415dc48
create Build your gem in a Docker containeraboutBuild Gems in Docker Isolation
context (empty) The takeaway names the pattern it recommends.
relation (empty) about
source_node_id (empty) 5b801b74-0f0b-4fee-a6f8-e9ef79c6b01f
target_node_id (empty) d9e04374-7fc6-476b-84a4-9b7d043214c9
create Declare gem runtime dependencies in the gemspecaboutgemspec
context (empty) Takeaway about correctly using the gemspec file.
relation (empty) about
source_node_id (empty) 52cdf60f-1a5f-4b17-a5e1-14e7c905a93a
target_node_id (empty) fc4368bd-58d0-484f-ac2e-2a406d12d977
create Declare gem runtime dependencies in the gemspecaboutPundit
context (empty) Pundit is used as the example runtime dependency.
relation (empty) about
source_node_id (empty) 52cdf60f-1a5f-4b17-a5e1-14e7c905a93a
target_node_id (empty) 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create Automate the whole release workflowaboutGitHub Actions
context (empty) Automation is done with GitHub Actions workflows.
relation (empty) about
source_node_id (empty) eb92c566-27c7-4e48-b9bb-288877af2c60
target_node_id (empty) cab3bb4f-ed74-4df5-8a84-0caa6f55601c
create Engines vs namespaces for splitting a growing monolithasked_atHow To Package A Rails Engine Generation To Automation
context (empty) Asked during the Q&A of this talk.
relation (empty) asked_at
source_node_id (empty) 5f276da9-2716-4f35-9b30-3611e9552bb7
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
create Avoiding model duplication across enginesasked_atHow To Package A Rails Engine Generation To Automation
context (empty) Asked during the Q&A of this talk.
relation (empty) asked_at
source_node_id (empty) a0eaeb65-401a-4c7c-91ac-f8193d695453
target_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
create Engines vs namespaces for splitting a growing monolithaboutRails Engine
context (empty) Question compares engines to simple namespaces.
relation (empty) about
source_node_id (empty) 5f276da9-2716-4f35-9b30-3611e9552bb7
target_node_id (empty) f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Packaging a Rails engine that uses WebpackeraboutRails Engine
context (empty) Question concerns engines specifically.
relation (empty) about
source_node_id (empty) fa735322-95bc-4b5c-9aa7-6a194cb31afd
target_node_id (empty) f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Avoiding model duplication across enginesaboutRails Engine
context (empty) Question concerns sharing data across engines.
relation (empty) about
source_node_id (empty) a0eaeb65-401a-4c7c-91ac-f8193d695453
target_node_id (empty) f14fb5ec-30aa-4243-a312-a7379e8e9f1e
create Avoiding model duplication across enginesaboutAvo
context (empty) Adrian's answer references how Avo avoids the issue entirely.
relation (empty) about
source_node_id (empty) a0eaeb65-401a-4c7c-91ac-f8193d695453
target_node_id (empty) f523171f-5f61-4e47-a115-b99aed7b7b99
create How To Package A Rails Engine Generation To Automationrelated_to18 months of using hotwire and viewcomponent in production
context (empty) Adrian opens by praising Yaroslav's earlier wroclove.rb 2022 talk on ViewComponent and Hotwire.
relation (empty) related_to
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 5d7d6506-60ed-44e3-a6f1-62858b836822
create Adrian MarinrecommendsHotwire
context (empty) Adrian praises Hotwire as one of the right tools in the Rails toolkit, contrasted with React.
relation (empty) recommends
source_node_id (empty) 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) a0a8a415-bd9e-46ed-8ee3-8448312af347
create Adrian MarinrecommendsReact
context (empty) Adrian argues there are many tools in the toolkit — React is valid where it fits, distinct from Hotwire.
relation (empty) recommends
source_node_id (empty) 3e489e95-e01d-45cd-882c-6153cf56f911
target_node_id (empty) 5026a4fc-0c6e-49d7-bb7d-29be23b72b24
create How To Package A Rails Engine Generation To Automationaboutreviewdog
context (empty) Lint workflow uses reviewdog to post inline suggestions on PRs.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) a35378bf-8930-4fa9-9f17-347eb0e65efb
create How To Package A Rails Engine Generation To AutomationaboutStandard RB
context (empty) Ruby linting in the engine's CI uses Standard RB via reviewdog.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) a9fac9ee-00c0-44c0-9410-f675f13d2532
create How To Package A Rails Engine Generation To AutomationaboutESLint
context (empty) JavaScript linting in the engine's CI uses ESLint via reviewdog.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 36b5493a-7fe7-4859-a03f-b185bde78260
create How To Package A Rails Engine Generation To AutomationaboutRelease Drafter
context (empty) Release notes are auto-drafted using the Release Drafter action.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 874d545e-dbc3-452c-8ea9-130c4d72d51f
create How To Package A Rails Engine Generation To AutomationaboutPR Labeler
context (empty) Pull requests are auto-labeled using the PR Labeler action by branch prefix.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 29c6bc21-fcc5-4069-96b7-2e7847e79dbd
create How To Package A Rails Engine Generation To AutomationaboutCodecov
context (empty) Coverage is uploaded to Codecov via its GitHub Action.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 2201c788-328e-428b-9fa8-154213d7c517
create How To Package A Rails Engine Generation To Automationaboutactions/checkout
context (empty) Used at the start of each workflow to check out the code.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) d1bdcc04-412d-4052-b6d0-30df57ea29a1
create How To Package A Rails Engine Generation To Automationaboutruby/setup-ruby
context (empty) Used in the test workflow to install the matrix's Ruby version.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 019f78d7-9a0a-49c9-9e17-93b4b4b3a11f
create How To Package A Rails Engine Generation To Automationaboutactions/upload-artifact
context (empty) Used to upload RSpec screenshots/html dumps from failing CI runs.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) dc42d50d-338f-4e4c-9164-f9a25bb5a90c
create How To Package A Rails Engine Generation To AutomationaboutGitHub Releases
context (empty) Release workflow creates a GitHub Release with the gem attached.
relation (empty) about
source_node_id (empty) fc4ec512-9426-4429-be4b-ab3fafac06e7
target_node_id (empty) 8f18a0bd-3225-4b7c-920e-a8aed642f4a6

Read set

129 nodes

person Adrian Marin search_nodes+get_node_edges tool Avo search_nodes tool Browserslist search_nodes concept Live Reload search_nodes tool Preact search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes tool Docker search_nodes takeaway Dockerize Exotic Dependencies search_nodes company Transloadit search_nodes tool dry-container search_nodes concept Direct Upload to Cloud search_nodes talk 18 months of using hotwire and viewcomponent in production search_nodes+get_node_edges talk Component Driven UI with ViewComponent search_nodes tool Hotwire search_nodes tool React search_nodes concept Virtual DOM search_nodes tool Rack search_nodes talk Towards the post framework future search_nodes tool Ember.js search_nodes tool Trailblazer search_nodes tool Hanami search_nodes tool Active Admin search_nodes person Adam Okoń search_nodes tool Rails 5.2 search_nodes tool interactor search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes tool Devise search_nodes tool Action Cable search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk How To Package A Rails Engine Generation To Automation search_nodes+get_node_edges takeaway Don't modularise with microservices or engines search_nodes concept Static Page Caching via nginx search_nodes takeaway Keep Project Setup Simple search_nodes takeaway Prefer a simple top-to-bottom worker search_nodes concept Rails Reload-Safe ES Configuration search_nodes tool Heroku search_nodes concept Namespace-Based Folder Hierarchy search_nodes question What is an enterprise Rails application? search_nodes tool rails_event_store search_nodes tool GitHub Actions search_nodes concept GitHub Self-Hosted Runner search_nodes tool CircleCI search_nodes takeaway Buy Faster Hardware search_nodes takeaway Sign serverlessforruby.org petition search_nodes takeaway Stable commits enable bisect search_nodes takeaway Shared Hardware Is a 1970s Feedback Loop search_nodes talk Ever shorter feedback loop search_nodes takeaway Contribute to Arkency aggregates repository search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Data Management With Ruby search_nodes talk Fix Production Bugs 20x Faster search_nodes project gemcheck search_nodes talk Methods Gem for Ruby Method References search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes project granite search_nodes takeaway Stop delegating decisions to popular library authors search_nodes tool image_processing gem search_nodes tool TruffleRuby search_nodes talk Scientific Ruby Lightning Talk search_nodes talk Ruby Standard Library Hidden Gems Lightning Talk search_nodes tool Ruby search_nodes person Emiliano Della Casa search_nodes talk To Refine or Not to Refine search_nodes takeaway Adopt CSS-in-JS for modern component-based frontends search_nodes takeaway Watch WebAssembly for real performance wins search_nodes concept CSS-in-JS search_nodes tool Babel search_nodes takeaway Share Browser-Support Config Across Front-End And Back-End search_nodes project AnyCable search_nodes tool Workspaces search_nodes concept Commit Transformations search_nodes concept Push Often Behind Feature Flags search_nodes question Phrases to avoid in code review search_nodes tool git bisect search_nodes takeaway Act as a perfect tool on reviews search_nodes project Scientific Ruby Community search_nodes talk Events events events search_nodes talk International cooperation in IT teams search_nodes tool RealtimeBoard search_nodes tool Discourse search_nodes tool Crystal Ball search_nodes question Has Mutant been run against popular Ruby libraries? search_nodes tool test-prof search_nodes takeaway Cache Clear Hook Killed a Test Suite search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes concept Aggregate Test Failures search_nodes tool knapsack_pro search_nodes tool parallel_tests search_nodes question Experience with mutation testing in other ecosystems? search_nodes talk Mutant on steroids search_nodes tool Tyrant search_nodes question Isn't asking password confirmation business logic? search_nodes person Yaroslav Shmarov search_nodes talk On the tasteful journey to Yippee search_nodes talk It is not so bad, after all search_nodes talk No 'Pundit' Intended search_nodes takeaway Name Things To Find Their Properties search_nodes talk Ruby on a $4 Computer search_nodes tool mruby search_nodes talk Better WebPerformance with Rails search_nodes tool CarrierWave search_nodes talk Orchestrating video transcoding in ruby search_nodes tool carrierwave_backgrounder search_nodes tool Active Storage search_nodes tool carrierwave-video search_nodes project monolith framework search_nodes talk Nightmare neighbours caveats of Rails based mutlitenancy search_nodes question Can parts of Eventide, Rails Event Store and Trailblazer be combined in one project? search_nodes tool Apartment search_nodes concept Majestic Monolith search_nodes takeaway Read the Ruby standard library search_nodes tool ruby-contracts search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes person Akira Matsuda search_nodes talk Configuration Again Lightning Talk search_nodes person Joel Drapper search_nodes tool Faker search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes tool Plezi search_nodes tool PureScript search_nodes tool Ruby on Rails search_nodes concept Cynefin Framework search_nodes

5 edges