Why does Rails fails to boot with "Expected to find a manifest file in `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError)"?

Ruby on-RailsRuby on-Rails-5

Ruby on-Rails Problem Overview


After bundle update my Rails app fails to boot with:

Expected to find a manifest file in `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError)

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

What's happening?

Looks like you've upgraded sprockets. The later version(s) of sprockets require what's called a manifest.js file. You don't have one. You need to create one, and add in a few "directives".

Why do I need to do this?

In the old version of sprockets, big assumptions were made about what assets to bundle/concatenate - this is what sprockets does btw. things were implicit. The latest changes are a step in the right direction: now you have to tell sprockets explicitly, what files you want bundled and/or concatenated: this is done in your manifest.js file e.g.:

"Sprockets, please"

  • bundle everything in folder abc together
  • bundle AND concatenate everything in folder xyz
  • keep admin.js separate.

Easy Steps To Solve the Problem:

  1. Create the manifest.js file

    $ mkdir -p app/assets/config 
    $ touch app/assets/config/manifest.js
     (not the root rails directory)
    
  2. Then copy and paste the following into the manifest.js file you just created:

    //= link_tree ../images
    //= link_directory ../javascripts .js
    //= link_directory ../stylesheets .css
    

Those funny commenty things above //= are called "directives". It's best if you head on over to the sprockets documentation and please, if you aren't familiar with it, learn how to configure it properly. But i'll provide a small example below:

Let's translate the //= link_directory ../javascripts .js directive:

"grab every js file in the javascripts directory, concatenate them, and keep them as SEPARATE javascript files i.e. no bundling." If you want bundling, use a different directive. You should also have a javascript_include_tag, which is typically placed in your application.html.erb file. If you have other files js files that are separately bundled, don't forget to add them to application.html.erb.

  1. If you have a precompile array in your app/config/environments/production.rb folder (see below for an example) then perhaps you should move them over to your manifest.js if they are not already accessed above.

    config.assets.precompile = ["admin.js", "admin.css"]

Presumably you will want your admin.js javascript file separate from your application.js file. No problem, just tell sprockets to keep them separate:

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link "admin.js"

4. Lastly, if you are using webpacker, you might want to decide what you want handled by the asset pipeline and what you want handled by webpacker. i.e. remove the link_directory to the javascripts file according to your own particular use cases.

Reference: read here for further details re: manifest.js. file

Source: Thanks to Richard Schneeman's blog - see here for more information..

EDIT: folks, if things are confusing or not clear: how can I fix if you don't complain? everyone benefits by these improvements, so pls speak up.

Solution 2 - Ruby on-Rails

A new major version of sprockets was recently released which is not compatible with the previous version.

Either perform the steps needed to upgrade or pin to version 3.x in Gemfile

gem 'sprockets', '~>3.0'

Solution 3 - Ruby on-Rails

Based on the answer here you may be able to solve this with:

mkdir -p app/assets/config && echo '{}' > app/assets/config/manifest.js

And if you need more details, the answer in this thread helpfully points to the Guide to upgrading from Sprockets 3.x to 4.x

Solution 4 - Ruby on-Rails

As suggested by link http://www.redmine.org/boards/2/topics/58169, it is a known issue. See #32223 and sprockets 4.0.0 breaks Redmine 3.4.11 with Ruby <2.5.0.

I just reproduced this issue with redmine 3.4.4, but found everything is ok with Redmine 3.4.12.

wget http://www.redmine.org/releases/redmine-3.4.12.tar.gz

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKrisView Question on Stackoverflow
Solution 1 - Ruby on-RailsBenKoshyView Answer on Stackoverflow
Solution 2 - Ruby on-RailsKrisView Answer on Stackoverflow
Solution 3 - Ruby on-RailsmayatronView Answer on Stackoverflow
Solution 4 - Ruby on-RailsHenry LiView Answer on Stackoverflow