The deploy doesn't create node_modules and raises Sprockets::FileNotFound (after upgrading to rails 7)
- Dominant language
- Ruby
- Stars
- 901
- Forks
- 262
- PR merge metrics
- No merged PRs in 30d
Description
### Steps to reproduce
After upgrading an application from Rails 6.1 to Rails 7.0 the Capistrano deployment fails.
The deployment has always worked (for years) and the application still works fine in development / test environments.
This is the error when running `cap production deploy`:
```
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as user@server1.myapp.com: rake exit status: 1
rake stdout: Nothing written
rake stderr: rake aborted!
Sprockets::FileNotFound: couldn't find file 'emojionearea/dist/emojionearea' with type 'text/css'
Checked in these paths:
/home/myapp/www/myapp/releases/20220928123230/app/assets/config
/home/myapp/www/myapp/releases/20220928123230/app/assets/images
/home/myapp/www/myapp/releases/20220928123230/app/assets/javascripts
/home/myapp/www/myapp/releases/20220928123230/app/assets/stylesheets
/home/myapp/www/myapp/releases/20220928123230/vendor/assets/javascripts
/home/myapp/www/myapp/releases/20220928123230/vendor/assets/stylesheets
/home/myapp/www/myapp/shared/bundle/ruby/3.0.0/gems/jquery-rails-4.5.0/vendor/assets/javascripts
/home/myapp/www/myapp/shared/bundle/ruby/3.0.0/gems/actiontext-7.0.4/app/assets/javascripts
/home/myapp/www/myapp/shared/bundle/ruby/3.0.0/gems/actiontext-7.0.4/app/assets/stylesheets
/home/myapp/www/myapp/shared/bundle/ruby/3.0.0/gems/actioncable-7.0.4/app/assets/javascripts
/home/myapp/www/myapp/shared/bundle/ruby/3.0.0/gems/activestorage-7.0.4/app/assets/javascripts
/home/myapp/www/myapp/shared/bundle/ruby/3.0.0/gems/actionview-7.0.4/lib/assets/compiled
/home/myapp/www/myapp/releases/20220928123230/node_modules
/home/myapp/www/myapp/releases/20220928123230/app/assets/stylesheets/application.scss:13
/home/myapp/www/myapp/shared/bundle/ruby/3.0.0/gems/sprockets-4.1.1/lib/sprockets/resolve.rb:62:in `resolve!'
...
```
After some investigation on the server I see that:
- the folder `/home/myapp/www/myapp/releases/20220928123230/` is present
- the folder `/home/myapp/www/myapp/releases/20220928123230/node_modules` is **not present** (and this is where the file `emojionearea/dist/emojionearea` should be found)
This probably means that the problem is not Sprockets (which is looking in the right path) but the fact that `node_modules` is not generated during the deploy. So, why the command `yarn install` is not executed during the deploy? Everything used to work before the upgrade to Rails 7.
### Expected behavior
The task `deploy:assets:precompile` should first download the Yarn modules to the `node_modules` folder on the server, then run `rake assets:precompile`.
### Actual behavior
When you deploy, `assets:precompile` raises an exception `Sprockets::FileNotFound`.
### System configuration
Rails 7.0.4
capistrano 3.17.1
capistrano-rails 1.6.2
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by examining the deploy:assets:precompile flow and the Capistrano Rails configuration to determine where yarn install is expected to run. Reproduce the deployment failure and inspect app/assets/stylesheets/application.scss, then confirm that node_modules is created before rake assets:precompile and that the emojionearea stylesheet resolves.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rails, ruby
- Domain
- devops
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100