'Allowing ruby buildpack on Heroku to use Yarn cache
I'm running a Ruby on Rails + Webpacker app on Heroku with Yarn v2 and hitting some issue with dependency caching. It seems that Yarn dependencies are reinstalled when it gets to asset:precompile
stage, ignoring the cache.
The app is running with both node
and ruby
heroku buildpacks.
The output of node
buildpack installation step:
-----> Installing binaries
engines.node (package.json): 16.x
engines.npm (package.json): unspecified (use default)
engines.yarn (package.json): unspecified (use default)
Resolving node version 16.x...
Downloading and installing node 16.15.0...
Using default npm version: 8.5.5
Resolving yarn version 1.22.x...
Downloading and installing yarn (1.22.18)
Using yarn 3.2.0
-----> Restoring cache
- yarn cache
-----> Installing dependencies
Running 'yarn install' with yarn.lock
➤ YN0000: ┌ Resolution step
➤ YN0000: └ Completed in 0s 232ms
➤ YN0000: ┌ Fetch step
➤ YN0000: └ Completed in 0s 469ms
➤ YN0000: ┌ Link step
➤ YN0007: │ core-js@npm:3.22.5 must be built because it never has been before or the last one failed
➤ YN0007: │ core-js-pure@npm:3.22.4 must be built because it never has been before or the last one failed
➤ YN0000: └ Completed in 8s 631ms
➤ YN0000: Done in 9s 587ms
-----> Build
-----> Caching build
- yarn cache
-----> Pruning devDependencies
Skipping because the Yarn workspace plugin is not present. Add the plugin to your source code with 'yarn plugin import workspace-tools'.
-----> Build succeeded!
So node
buildpack correctly restores dependencies in .yarn/cache
, all good here. Pruning is skipped so should have no additional removal/reinstall of packages.
However when it gets to Ruby one:
-----> Detecting rake tasks
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
RAILS_ENV=staging environment is not defined in config/webpacker.yml, falling back to production environment
➤ YN0000: ┌ Resolution step
➤ YN0000: └ Completed in 0s 236ms
➤ YN0000: ┌ Fetch step
➤ YN0013: │ @ampproject/remapping@npm:2.2.0 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ @babel/code-frame@npm:7.16.7 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ @babel/compat-data@npm:7.17.10 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ @babel/core@npm:7.17.10 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ @babel/generator@npm:7.17.10 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ @babel/code-frame@npm:7.16.7 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ @babel/compat-data@npm:7.17.10 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ @babel/core@npm:7.17.10 can't be found in the cache and will be fetched from the remote registry
...
Doesn't seem like it gets anything from .yarn/cache
and everything gets reinstalled again.
Anyone got any ideas how to get around that, sans for checking in full .yarn/cache
into git for offline caching?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|