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 [email protected]: 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 fileemojionearea/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
Activity