rails_live_reload icon indicating copy to clipboard operation
rails_live_reload copied to clipboard

Doesn't work with Phlex

Open joshuap opened this issue 1 year ago • 1 comments

I was playing with phlex-rails today and wanted to see if I could get it working with a live reload plugin and landed on this one.

I edited rails_live_reload's default watched file patterns to watch Phlex views:

RailsLiveReload.configure do |config|
  # Add .rb for Phlex views
  config.watch %r{app/views/.+\.(erb|rb)$}, reload: :on_change
  config.watch %r{(app|vendor)/(assets|javascript)/\w+/(.+\.(css|js|html|png|jpg|ts|jsx)).*}, reload: :always
end

That made it watch the Phlex view paths, but it wasn't live reloading. The problem is that rails_live_reload uses the payload[:identifier] from the ActiveSupport::Notifications::Event to track which views were rendered for the current page, and compares that to the watched file paths to trigger a reload for just the pages that need it. For other template systems, payload[:identifier] is the template file path, but in Phlex it's the name of the Ruby class:

#<ActiveSupport::Notifications::Event:0x0000000121293020
 @allocation_count_finish=0,
 @allocation_count_start=0,
 @cpu_time_finish=0.0,
 @cpu_time_start=0.0,
 @end=1708821265437.4321,
 @name="render_template.action_view",
 @payload=
  {:identifier=>"Posts::IndexView",
   :layout=>"application_layout",
   :locals=>{}},
 @time=1708821265414.1838,
 @transaction_id="2b982eb42c32ed910b90">

It's trying to compare the file that changed — "app/views/posts/index_view.rb" — with the file that was rendered, which for Phlex is "Posts::IndexView".

I know Phlex is a relatively new project, so I understand if you don't want to fix this, but I wasn't sure what else to do with this knowledge, so dropping it here. :)

cc @joeldrapper @igorkasyanchuk

joshuap avatar Feb 25 '24 01:02 joshuap

I'll second that observation - but I'm confident that when @joeldrapper get just a few minutes on his hands the magic will be eminent 😍

wdiechmann avatar Apr 04 '24 08:04 wdiechmann