Skip to content

Commit bac06e3

Browse files
author
Job Hammer
committed
updates
1 parent dba7130 commit bac06e3

File tree

7 files changed

+82
-73
lines changed

7 files changed

+82
-73
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
## [Unreleased]
22

3+
## [0.2.0.3] - 2026-04-02
4+
5+
- Whole repo was scanned for comiling so it was slow.
6+
37
## [0.2.0.2] - 2026-04-02
48

59
- Add commands page

README.md

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,9 +493,27 @@ rails ruby_cms:css:compile_gem
493493
### Faster Docker Builds (`assets:precompile`)
494494

495495
`assets:precompile` loads the Rails app in production mode and can be slow in Docker/Fly builds.
496-
RubyCMS now skips non-asset runtime initializers during this phase (navigation registration,
496+
RubyCMS skips non-asset runtime initializers during this phase (navigation registration,
497497
dashboard registration, versioning hook, settings import, and permission seeding), which reduces
498-
precompile overhead.
498+
precompile overhead. Detection uses `ARGV` (not only `$PROGRAM_NAME`) so it still applies when the
499+
Ruby program name is `ruby` instead of `rails`.
500+
501+
**Tailwind CSS:** Do not add multiple `@source` globs that point at the same RubyCMS gem (e.g. both
502+
`../../../../gems/ruby_cms/...` and `/usr/local/bundle/.../ruby_cms-*`). That scans the engine twice
503+
and slows `tailwindcss:build` a lot. Instead, rely on [tailwindcss-rails engine support](https://github.com/rails/tailwindcss-rails#rails-engines-support-experimental):
504+
505+
1. RubyCMS ships `app/assets/tailwind/ruby_cms_engine/engine.css` with `@source` paths relative to the gem
506+
(the directory matches Rails’ `engine_name` for `RubyCms::Engine`, which is `ruby_cms_engine`).
507+
2. `rails tailwindcss:engines` (run automatically before `tailwindcss:build`) generates
508+
`app/assets/builds/tailwind/ruby_cms_engine.css` in the host app.
509+
3. In the host’s `app/assets/tailwind/application.css`, add **once**:
510+
511+
```css
512+
@import "../builds/tailwind/ruby_cms_engine";
513+
```
514+
515+
Place it next to your other `@import` lines (e.g. after `@import "tailwindcss";`). Remove any
516+
hand-written `@source` lines aimed at the RubyCMS gem.
499517

500518
Recommended Docker layer order:
501519

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* RubyCMS Tailwind content sources (paths relative to this file).
3+
* Host apps should import the generated shim — see tailwindcss-rails "Rails Engines support":
4+
* @import "../builds/tailwind/ruby_cms_engine";
5+
* in app/assets/tailwind/application.css (do not duplicate @source to the gem in the host).
6+
*
7+
* Folder name matches Rails' engine_name for RubyCms::Engine ("ruby_cms_engine").
8+
*/
9+
@source "../../../views/**/*.erb";
10+
@source "../../../components/**/*.rb";
11+
@source "../../../helpers/**/*.rb";
12+
@source "../../../javascript/**/*.js";

lib/generators/ruby_cms/install_generator.rb

Lines changed: 33 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -855,18 +855,45 @@ def remove_registration_lines(content)
855855
end.join("\n")
856856
end
857857

858-
# Helper: add @source for RubyCMS views/components so Tailwind finds utility classes.
859-
# Not a generator task.
858+
# Adds a single @import for tailwindcss-rails' engine shim (see gem app/assets/tailwind/ruby_cms_engine/engine.css).
859+
# Avoids duplicate @source globs to the gem, which makes tailwindcss:build much slower.
860860
def add_ruby_cms_tailwind_source(tailwind_css_path)
861861
return unless tailwind_css_path.to_s.present? && File.exist?(tailwind_css_path)
862862

863863
content = File.read(tailwind_css_path)
864-
gem_source_lines = build_gem_source_lines(tailwind_css_path)
865-
return if gem_source_lines.all? {|line| content.include?(line) }
864+
return if content.match?(%r{builds/tailwind/ruby_cms_engine})
866865

867-
inject_tailwind_source(tailwind_css_path, content, gem_source_lines)
866+
injection = +"\n/* RubyCMS: Tailwind content via tailwindcss-rails engine (see ruby_cms README). */\n"
867+
injection << "@import \"../builds/tailwind/ruby_cms_engine\";\n"
868+
869+
inserted = inject_ruby_cms_engine_import_after_tailwind!(tailwind_css_path, content, injection)
870+
unless inserted
871+
inject_into_file tailwind_css_path.to_s, after: /\A/ do
872+
injection
873+
end
874+
end
875+
876+
say "✓ Task tailwind/source: Added RubyCMS engine import to #{tailwind_css_path}.", :green
868877
rescue StandardError => e
869-
say "⚠ Task tailwind/source: Could not add @source: #{e.message}. Add manually.", :yellow
878+
say "⚠ Task tailwind/source: Could not add engine import: #{e.message}. Add manually.", :yellow
879+
end
880+
881+
def inject_ruby_cms_engine_import_after_tailwind!(tailwind_css_path, content, injection)
882+
patterns = [
883+
%(@import "tailwindcss";\n),
884+
%(@import "tailwindcss";),
885+
%(@import "tailwindcss"\n),
886+
%(@import "tailwindcss")
887+
]
888+
patterns.each do |after_pattern|
889+
next unless content.include?(after_pattern)
890+
891+
inject_into_file tailwind_css_path.to_s, after: after_pattern do
892+
injection
893+
end
894+
return true
895+
end
896+
false
870897
end
871898

872899
# Tailwind v3 support (tailwind.config.js content array)
@@ -905,65 +932,6 @@ def ruby_cms_tailwind_content_patterns
905932
]
906933
end
907934

908-
def build_gem_source_lines(tailwind_css_path)
909-
css_dir = Pathname.new(tailwind_css_path).dirname
910-
gem_views = path_relative_to_css_or_absolute(RubyCms::Engine.root.join("app/views"),
911-
css_dir)
912-
gem_components = path_relative_to_css_or_absolute(
913-
RubyCms::Engine.root.join("app/components"), css_dir
914-
)
915-
[
916-
%(@source "#{gem_views}/**/*.erb";),
917-
%(@source "#{gem_components}/**/*.rb";)
918-
]
919-
end
920-
921-
def path_relative_to_css_or_absolute(target_path, css_dir)
922-
Pathname.new(target_path).relative_path_from(css_dir).to_s
923-
rescue ArgumentError
924-
# Different mount/volume: fall back to absolute path.
925-
Pathname.new(target_path).to_s
926-
end
927-
928-
def inject_tailwind_source(tailwind_css_path, content, gem_source_lines)
929-
to_inject = build_tailwind_source_injection(gem_source_lines)
930-
inserted = try_insert_after_patterns?(tailwind_css_path, content, to_inject)
931-
inject_at_start(tailwind_css_path, to_inject) unless inserted
932-
say "✓ Task tailwind/source: Added @source for RubyCMS views/components to " \
933-
"tailwind/application.css.",
934-
:green
935-
end
936-
937-
def build_tailwind_source_injection(gem_source_lines)
938-
to_inject = +"\n/* Include RubyCMS views/components so Tailwind finds utility classes. */\n"
939-
Array(gem_source_lines).each {|line| to_inject << line << "\n" }
940-
to_inject << "\n"
941-
to_inject
942-
end
943-
944-
def try_insert_after_patterns?(tailwind_css_path, content, to_inject)
945-
patterns = [
946-
%(@import "tailwindcss";\n),
947-
%(@import "tailwindcss";),
948-
%(@import "tailwindcss"\n),
949-
%(@import "tailwindcss")
950-
]
951-
patterns.each do |after_pattern|
952-
next unless content.include?(after_pattern)
953-
954-
inject_into_file tailwind_css_path.to_s, after: after_pattern do
955-
to_inject
956-
end
957-
return true
958-
end
959-
false
960-
end
961-
962-
def inject_at_start(tailwind_css_path, to_inject)
963-
inject_into_file tailwind_css_path.to_s, after: /\A/ do
964-
to_inject
965-
end
966-
end
967935
end
968936

969937
def run_migrate

lib/ruby_cms/engine.rb

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ class Engine < ::Rails::Engine
100100
# For importmap: ensure engine's importmap is loaded
101101
if app.config.respond_to?(:importmap)
102102
app.config.importmap.paths << config.root.join("config/importmap.rb")
103-
app.config.importmap.cache_sweepers << config.root.join("app/javascript")
103+
# Only sweep the engine's Stimulus tree (not the whole app/javascript tree)
104+
app.config.importmap.cache_sweepers << config.root.join("app/javascript/controllers/ruby_cms")
104105
end
105106
end
106107

@@ -262,12 +263,18 @@ class Engine < ::Rails::Engine
262263
end
263264
end
264265

266+
# True during asset pipeline tasks so we skip DB-heavy initializers (permissions, settings import).
267+
# Detect by ARGV first: $PROGRAM_NAME is often "ruby" when using `ruby bin/rails`, which would
268+
# miss the old rake/rails basename check; tailwindcss:build runs as a prerequisite of
269+
# assets:precompile and keeps the same ARGV, but a standalone `rails tailwindcss:build` must match too.
265270
def self.assets_precompile_phase?
266-
command = File.basename($PROGRAM_NAME.to_s)
267-
rake_assets_precompile = command == "rake" && ARGV.include?("assets:precompile")
268-
rails_assets_precompile = command == "rails" && ARGV.include?("assets:precompile")
271+
argv = Array(ARGV).map(&:to_s)
272+
return true if argv.include?("assets:precompile")
273+
return true if argv.any? {|a| a.start_with?("tailwindcss:") }
274+
return true if argv.include?("propshaft:compile")
269275

270-
rake_assets_precompile || rails_assets_precompile
276+
command = File.basename($PROGRAM_NAME.to_s)
277+
(command == "rake" || command == "rails") && argv.include?("assets:precompile")
271278
end
272279
end
273280
end

lib/ruby_cms/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module RubyCms
4-
VERSION = "0.2.0.2"
4+
VERSION = "0.2.0.3"
55
end

ruby_cms-0.2.0.3.gem

669 KB
Binary file not shown.

0 commit comments

Comments
 (0)