3

I am trying to do server side rendering with rails using webpacker & react-rails. I don't have any problem with client-side rendering but I got the following exception with server-side rendering.

ExecJS::ProgramError in Static#index

identifier 'Set' undefined

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>ReactExample</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

index.html.erb

<%= react_component('hello', {}, {prerender: true}) %>

application.js

/* eslint no-console:0 */
// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.
//
// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate
// layout file, like app/views/layouts/application.html.erb

// Support component names relative to this directory:
var componentRequireContext = require.context("components", true)
var ReactRailsUJS = require("react_ujs")
ReactRailsUJS.useContext(componentRequireContext)

server_rendering.js

// By default, this pack is loaded for server-side rendering.
// It must expose react_ujs as `ReactRailsUJS` and prepare a require context.
var componentRequireContext = require.context("components", true)
var ReactRailsUJS = require("react_ujs")
ReactRailsUJS.useContext(componentRequireContext)
aravvn
  • 774
  • 8
  • 8

1 Answers1

0

Upgrade from TheRubyRacer to a JavaScript execution engine that is modern.

TheRubyRacer depends on LibV8 (the bit that powers node.js) but it's locked to version 3, LibV8 itself is already at version 7.

Use a modern JS gem such as Mini_Racer and this issue goes away.

BookOfGreg
  • 3,550
  • 2
  • 42
  • 56