Skip to content

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

Open
@collimarco

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 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions