Objective
This PR should fix the CI build, which is currently failing for all appraisals with the following error:
Sprockets::Railtie::ManifestNeededError:
Expected to find a manifest file in `app/assets/config/manifest.js`
But did not, please create this file and use it to link any assets that need
to be rendered by your app:
Example:
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
Details
This is due to Sprockets 4, which requires this manifest.js
file. Sprockets 4 was published on 8 October 2019, the day after the last successful build.
From what I can tell, the only fix is having the client app listing Administrate's asset files in its manifest.js
file. Therefore I'm creating one for the example app (used in the specs) and documenting this extra manual work in the readme.
For some detail on this manifest file, see https://www.schneems.com/2017/11/22/self-hosted-config-introducing-the-sprockets-manifestjs/
But it passes on my machine!
If you run the specs locally with bundle exec rake
, they'll probably pass. This is because the bundled Gemfile.lock
has Sprockets pinned to version 3.7.2 currently. However if you run the appraisal specs with bundle exec appraisal rake
, these may fail because the appraisal lockfiles are not under version control, and therefore will be regenerated on first run.
Note that a newly created Rails app won't have this issue at the time being. This is because Rails apps are still being generated to use the sass
gem (despite its being end-of-life'd) and this depends on sprockets < 4
. Using sassc
in your app may land you Sprockets 4 though (you'd still have to explicitly bundle update
to get it).
Future options
I don't see a way to have Administrate provide an engine-level manifest.js
instead of having the client application manually add it. I might be missing something though.
Another option would be having the Administrate generator add the required lines to the manifest files. I think we'd still have to document it in the readme, as that's bound to not be enough for many.