The asset "application.js" is not present in the asset pipeline in Rails 6 - asset-pipeline

I am creating a RoR-6 app and I get the following error thrown from application.html.erb file from this line:
javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
I get the following error:
ActionView::Template::Error: The asset "application.js" is not present in the asset pipeline.
The app was created by running rails new myapp -d postgres
I am using rails 6.0.0.rc1

You'll want to use javascript_pack_tag instead of javascript_include_tag:
javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'
This is required because webpacker handles javascript compilation in Rails 6.

If you do not want to use Webpack, add the following to config/initializers/assets.rb:
Rails.application.config.assets.precompile += %w(application.js)

Place this line in the application.html.erb:
<%= javascript_pack_tag 'application' %>
This worked on my end.

Running yarn build solved the issue for me (which in the first place was caused by running rails assets:clobber)

Related

Rails 6.1.1 doesn't load the webpacker created CSS files in production mode

this is my first time asking a question here, I hope I would explain my problem well.
In one of my recent tasks, I'm upgrading our app to Ruby and Rails (Ruby 2.6.6 > 2.7.2, Rails 6.0.3.2. > 6.1.1)
I had several issues along the way, upgraded some gems and JS libraries. The application runs fine in development mode. However when I switch to production mode, I run these commands to compile and run the server.
RAILS_ENV=production bundle exec rake webpacker:compile
./node_modules/webpack/bin/webpack.js --config webpack.config.js
When I run the app, in production mode it looks running normal, but when I go to localhost:3000 it throws several 500 errors regarding to CSS files. I see the main page of the app as plain HTML, without CSS.
2021-01-22 11:50:51 -0500 Rack app ("GET /assets/stylesheets/app-styles-3661efb317da3fb28f52.css" - (127.0.0.1)): #<NoMethodError: undefined method `match?' for #<ActionDispatch::FileHandler:0x00007ff610502c20>>
2021-01-22 11:50:25 -0500 Rack app ("GET /assets/landing.debug-05588bd014e46c264aaf6e00d2f5c570dd7ca3ed42336c2ff6d5c05bf986afe2.js" - (127.0.0.1)): #<NoMethodError: undefined method `match?' for #<ActionDispatch::FileHandler:0x00007ff610502c20>>
2021-01-22 11:50:25 -0500 Rack app ("GET /assets/companyLogo-6700adf796812269b9428251803c253b9c073095ef511d3619d269a0fdd96435.png" - (127.0.0.1)): #<NoMethodError: undefined method `match?' for #<ActionDispatch::FileHandler:0x00007ff610502c20>>
Files which are mentioned in the error are exists under the /public folder. In the browser's page source, I can see the path as well. When I click the folder path on page source, I see this error on the browser.
An unhandled lowlevel error occurred. The application logs may have details.
When I check the docs of RoR, the match? method for ActionDispatch::FileHandler is not there, but in 6.0.3.2 docs, it is deprecated without a notice, maybe.?. It is not something I call intentionally, it is probably called somewhere in Rails when the app is running on production mode.
I have those helper in my erb files.
<%= javascript_pack_tag 'application' %>
<%= stylesheet_pack_tag 'application' %>
I tried replacing them with
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
but no luck :(
I tried this as well.
Is anyone have an idea how can I make sure Rails is loading these files and accessible in the user side? Or any better debugging suggestions are appreciated!
Thanks in advance!
Note: When I switch to development mode, everything works fine.
BTW, Some Packages I use:
"#rails/webpacker": "5.2.1" #-> was 4.0.2
"webpack-bundle-analyzer": "3.3.2"
"webpack-manifest-plugin": "3.0.0-rc.0" #-> was 2.0.4
"webpack-cli": "4.4.0", #-> was 3.3.0 and it was only devDependency
We had the same issue with the match? method missing for ActionDispatch::FileHandler
We traced it back to: https://github.com/romanbsd/heroku-deflater/issues/54
Removing the heroku-deflater gem fixed it for us
If you have issues with this and get a error like this:
ActionView::Template::Error (Webpacker can't find application.css in /webapp/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
"application.js": "/packs/js/application-26b24ac7b08f8a1b640f.js",
"application.js.map": "/packs/js/application-26b24ac7b08f8a1b640f.js.map",
"entrypoints": {
"application": {
"js": [
"/packs/js/application-26b24ac7b08f8a1b640f.js"
],
"js.map": [
"/packs/js/application-26b24ac7b08f8a1b640f.js.map"
]
},
}
):
You can resolve it by deleting the stylesheet_pack_tag in app/views/layouts/application.html.erb. The javascript_pack_tag directive loads the scss/css.
You can see in the error message entrypoints that the scss was not generated, its inside the js. I've self inflicted this error on me because of outdated guides.
Example
With the following files & contents:
app/javascript/packs/application.js
// rails generated stuff
import "styles/application.scss"
app/javascript/styles/application.scss
// some scss rules
body { background-color: red; }
app/views/layouts/application.html.erb:
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

Rails 4 image_path('image.jpg') displays image path instead of actual image.

Running Rails 4 and deployed to Heroku and have been struggling with a strange issue.
Config contains:
config.assets.compile = true
Gemfile contains:
gem 'rails_12factor', group: :production
Have a line in my application.html.erb to render an image:
<%= image_path('image.jpg') %>
Placed my image in the following locations (excessive but troubleshooting):
assets
assets/images
public
public/images
I am compiling assets during my deployment to Heroku (slug compilation) and no errors are returned.
When I open the webpage the image is not rendered and instead the path is provided as:
"/images/image.jpg"
Any thoughts as to why this is occurring?
Thank you all in advanced
That is the expected behaviour for image_path. I think what you're looking for is image_tag.
For example, if your image is assets/images/image.png to render it in the view you would use:
<%= image_tag('image.png') %>
That is the recommended method, but you could also do
<img src="<%= image_path('image.png')%>" />

Using Sass + Compass + Blueprint in Rails 3.1 App

I am struggling BIG TIME with getting this framework set up correctly. Has anyone successfully been able to get this working? If so, I would love any and all feedback. Thanks!
I'm following the instructions from http://compass-style.org/install/ and wondering where to put the files within the Rails 3.1 app: inside app/assets/stylesheets or keep it in app/stylesheets as it resides when installing compass?
Also, compass gives a set of instructions after $ compass init rails . --using blueprint below:
Now add these lines to the head of your layout(s):
%head
= stylesheet_link_tag 'screen.css', :media => 'screen, projection'
= stylesheet_link_tag 'print.css', :media => 'print'
/[if lt IE 8]
= stylesheet_link_tag 'ie.css', :media => 'screen, projection'
This looks like HAML (which I'm not familiar with). I add these link tags using .erb instead and nothing seems to work.
Putting this into my config/application.rb worked for me:
config.sass.load_paths ||= []
config.sass.load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
config.sass.load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/blueprint/stylesheets"
REF: https://github.com/rails/sass-rails/issues/3

Jruby, Rails3.1, Sprockets - Same File error

On windows, running Jruby 1.6.4 - this issue occurs in Sprockets 2.0.0 and 2.0.2, Rails 3.1.0 and 3.1.1. Using therubyrhino as the js runtime, but this also occurs when using execjs (which correctly finds jscript).
Spin up a sample Rails project with a scaffolded controller. Start the server. Edit the controller's css.scss file with any change & save. Refresh the page. On Mac/Linux - things are fine. However, on windows you receive a "same file" error. This happens every time you change the css.scss file - and you must run: rake assets:clean to get past it.
Same behavior for coffeescript files (though again, only on windows). Asked the sprockets guys, but they recommended I ask the Rails core team (which I have). Decided to fork the questioning here as well.
Any thoughts?
BTW, here's a sample of the error:
ActionView::Template::Error (same file: C:/DEV/Information_Center/rubyw/edist3/tmp/cache/assets/sprockets%2F25f4cb117025b2fbc2fb480688c87da0.6816.15608 and C:/DEV/Information_Center/rubyw/edist3/tmp/cache/assets/D34/450/sprockets%2F25f4cb117025b2fbc2fb480688c87da0):
3:
4: <%= yield :page_title %> | foo.com
5: <%= stylesheet_link_tag "application" %>
6: <%= stylesheet_link_tag "article" %>
7: <%= javascript_include_tag "application" %>
8: <%= javascript_include_tag "article" %>
9: <%= csrf_meta_tags %>
app/views/layouts/article.html.erb:6:in `_app_views_layouts_article_html_erb___1475428847_7158'
Rendered C:/DEV/programs/jruby-1.6.4/lib/ruby/gems/1.8/gems/actionpack- 3.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.0ms)
Rendered C:/DEV/programs/jruby-1.6.4/lib/ruby/gems/1.8/gems/actionpack- 3.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.0ms)
Rendered C:/DEV/programs/jruby-1.6.4/lib/ruby/gems/1.8/gems/actionpack- 3.1.1/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (0.0ms)
Rendered C:/DEV/programs/jruby-1.6.4/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.0ms)
Rendered C:/DEV/programs/jruby-1.6.4/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (0.0ms)
Workaround
Well - not much traction from the Rails core team just yet on this, but this workaround seems to allow sprockets and Rails to play a little nicer, via Jruby on Windows:
-add to development.rb
config.assets.cache_store = nil

Can't get asset pipeline working

I can't get the asset pipeline working for some reason. I get a 404 on request to both application.css and application.js. I'm using rails 3.1.0.rc6. Nothing special, just created a new project.
In my layout file:
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
It's linking to /stylesheets/application.css and same with the js file. I'm using pow but also tried starting the server with webrick.
Any ideas?
Note: using sprockets 2.0.0.beta.15
Figured it out. I had to make an explicit require call to "sprockets/railtie"
You might find that adding
config.serve_static_assets = true
to your config/environments/xxx.rb will help.
To be more exact, add this to your Gemfile
gem 'sprockets/railtie'

Resources