DEV Community

Nick Taylor
Nick Taylor

Posted on • Updated on

Accessing asset_path in webpacker *.js.erb pack

I’ve configured webpacker to be able to process ERBs (bundle exec rails webpacker:install:erb) because I need paths generated by Sprockets' asset_path at build time so that I get properly generated asset URLs.

The ERB integration works with the simple example that you get after installing ERB/Webpacker integration, but I’m wondering how to have access to asset_path. From what I’ve found so far, it doesn’t appear to be possible,

Does anyone know if it's possible? In the meantime, I will keep digging 😉

Person slipping and sliding while attempting to shovel snow

Top comments (6)

rhymes profile image
glennmen profile image
Glenn Carremans

You beat me to it 😉I was about to comment it but refreshed first and saw your comment.

nickytonline profile image
Nick Taylor

I tried this earlier today and it did not seem to work. Maybe I had something misconfigured. Will give it another go. Thanks @rhymes !

nickytonline profile image
Nick Taylor

Oh snap! It works now. Must have been a case of not enough coffee. Thanks peeps!

Man about to drink a pot of coffee

Thread Thread
ben profile image
Ben Halpern


May anyone who lands on this thread during a future search rejoice!

Thread Thread
nickytonline profile image
Nick Taylor • Edited

@rhymes , @ben , I figured out why it wasn't working the other day because it wasn't working for me today either. This is probably obvious to seasoned Rails devs, but this wasn't obvious to a Rails newb like me. 🙃

This is the sample code from the webpacker docs

<% helpers = ActionController::Base.helpers %>
const railsImagePath = "<%= helpers.image_path('rails.png') %>"

I didn't realize that Sprockets checks to see if the image actually exists, i.e. 'rails.png'. This is why I was getting exit code 1 from the rails-erb-loader.

I discovered this by reading through one of the issues about exit code 1 for rails-erb-loader.

I followed the instructions from n-rodriguez to test it outside of the rails-erb-loader, so I ran

cat app/javascript/packs/homePageFeed.jsx.erb  | bin/rails runner ./node_modules/rails-erb-loader/erb_transformer.rb __RAILS_ERB_LOADER_DELIMETER__ erb

and sure enough, I got an error but with more details.

Traceback (most recent call last):
        25: from bin/rails:4:in `<main>'
        24: from /Users/yolo/.gem/gems/activesupport- `require'
        23: from /Users/yolo/.gem/gems/activesupport- `load_dependency'
        22: from /Users/yolo/.gem/gems/activesupport- `block in require'
        21: from /Users/yolo/.gem/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
        20: from /Users/yolo/.gem/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
        19: from /Users/yolo/.gem/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
        18: from /Users/yolo/.gem/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
        17: from /Users/yolo/.gem/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
        16: from /Users/yolo/.gem/gems/railties- `<main>'
        15: from /Users/yolo/.gem/gems/railties- `invoke'
        14: from /Users/yolo/.gem/gems/railties- `perform'
        13: from /Users/yolo/.gem/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch'
        12: from /Users/yolo/.gem/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command'
        11: from /Users/yolo/.gem/gems/thor-0.20.3/lib/thor/command.rb:27:in `run'
        10: from /Users/yolo/.gem/gems/railties- `perform'
         9: from /Users/yolo/.gem/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load'
         8: from /Users/yolo/.gem/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load'
         7: from /Users/yolo/dev/ `<main>'
         6: from /Users/yolo/.rbenv/versions/2.6.5/lib/ruby/2.6.0/erb.rb:901:in `result'
         5: from /Users/yolo/.rbenv/versions/2.6.5/lib/ruby/2.6.0/erb.rb:901:in `eval'
         4: from (erb):8:in `<main>'
         3: from /Users/yolo/.gem/gems/actionview- `image_path'
         2: from /Users/yolo/.gem/gems/cloudinary-1.13.2/lib/cloudinary/helper.rb:378:in `path_to_asset'
         1: from /Users/yolo/.gem/gems/actionview- `asset_path'
/Users/yolo/.gem/gems/sprockets-rails-3.2.1/lib/sprockets/rails/helper.rb:83:in `compute_asset_path': The asset "rails.png" is not present in the asset pipeline. (Sprockets::Rails::Helper::AssetNotFound)


So TIL that Sprockets actually looks for the asset. It just isn't trying to create a URL for any random image.

Remember folks, always dig when things aren't working 😉