reactjs/react-rails

Error when running rails generate react:install command

adil62 opened this issue · 4 comments

System configuration

  • Shakapacker or Sprockets version: 6.5
  • React-Rails version: 2.6
  • Rect_UJS version: dont see it in gemfile
  • Rails version: 7.0.4
  • Ruby version: 3.1.3

When I run rails generate react:install Im getting the following error:

/Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/3.1.0/fileutils.rb:243:in `mkdir': Read-only file system @ dir_s_mkdir - /components (Errno::EROFS)
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/3.1.0/fileutils.rb:243:in `fu_mkdir'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/3.1.0/fileutils.rb:221:in `block (2 levels) in mkdir_p'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/3.1.0/fileutils.rb:219:in `reverse_each'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/3.1.0/fileutils.rb:219:in `block in mkdir_p'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/3.1.0/fileutils.rb:211:in `each'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/3.1.0/fileutils.rb:211:in `mkdir_p'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/actions/empty_directory.rb:52:in `block in invoke!'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/actions/empty_directory.rb:117:in `invoke_with_conflict_check'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/actions/empty_directory.rb:50:in `invoke!'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/actions.rb:93:in `action'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/actions/empty_directory.rb:14:in `empty_directory'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/react-rails-2.6.0/lib/generators/react/install_generator.rb:26:in `create_directory'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `block in invoke_all'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `each'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `map'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:134:in `invoke_all'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/group.rb:232:in `dispatch'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-7.0.4/lib/rails/generators.rb:263:in `invoke'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-7.0.4/lib/rails/commands/generate/generate_command.rb:26:in `perform'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-7.0.4/lib/rails/command/base.rb:87:in `perform'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-7.0.4/lib/rails/command.rb:48:in `invoke'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-7.0.4/lib/rails/commands.rb:18:in `<main>'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
        from /Users/adilismail/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
        from bin/rails:4:in `<main>'

I just encountered the same problem:

  • Shakapacker version: 6.5
  • React-Rails version: 2.6
  • Rails version: 7.0.4
  • Ruby version: 3.1.0

From the stack trace, it looks like the problem is that components_dir might be nil here:

empty_directory File.join(components_dir, 'components')

and so react-rails is trying to create a directory at the root of the filesystem /components which is why we see:

Read-only file system @ dir_s_mkdir - /components

Still not sure why...

So I was wrong about components_dir being nil.

What I actually see in my setup (using extensive puts technology 😆) is that Webpacker.config.source_entry_path evaluates to /:

Webpacker.config.source_entry_path # Webpacker >3

And this is used to define javascript_dir which evaluates to ../../..:

def javascript_dir
if webpacker?
webpack_source_path
.relative_path_from(::Rails.root)
.to_s

Which is used to define components_dir which evaluates to ../../../..:

def create_directory
components_dir = if webpacker?
Pathname.new(javascript_dir).parent.to_s
else
javascript_dir
end
empty_directory File.join(components_dir, 'components')

And so empty_directory File.join(components_dir, 'components') ends up trying to create /components

So I now think that the problem is that Webpacker.config.source_entry_path evaluates to /

Still not sure why...

One last thing that I noticed.

In the config/webpacker.yml that was generated for me, I see source_entry_path: / 🤔

However, in the example project, I see that it is set to source_entry_path: packs: https://github.com/BookOfGreg/react-rails-example-app/blob/b626517d83cd5e4b2ffa6344784af4974652ab80/config/webpacker.yml#L5

If I make this change to my config, then rails generate react:install succeeds.

I am going to leave further debugging up to someone that is more familiar with this project now.

Duplicate of #1226.