capistrano / capistrano/rails

The deploy doesn't create node_modules and raises Sprockets::FileNotFound (after upgrading to rails 7)

Open
#259 4 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.