Skip to content
This repository was archived by the owner on Oct 19, 2018. It is now read-only.
This repository was archived by the owner on Oct 19, 2018. It is now read-only.

asset configuration and heroku deploy #12

Open
@janbiedermann

Description

@janbiedermann

Example for using Sprockets and Webpacker together

config/initializers/hyperloop.rb

Hyperloop.configuration do |config|
  config.transport = :action_cable
  config.prerendering = :on

  config.cancel_import "react"
  config.cancel_import "react_ujs"
  config.cancel_import "react/react-source-browser"
  config.cancel_import "react/react-source-server"
  config.prerendering_files = ["react-server.js", "react_ujs.js", "client_and_server.js", "hyperloop-prerender-loader.js"]
  config.import "reactrb/auto-import"
end
// => application.js
//= require react
//= require react_ujs
//= require hyperloop-loader
// => config/webpack/custom.js
module.exports = {
  externals: {
    "jquery": "jQuery",
    "react": "React"
  }
};
// => app/javascript/packs/client_only.js
// frontend requires like jQuery
// => app/javascript/packs/client_and_server.js
React = require('react');
// and other components...
RM = require("react-materialize");
# => layout
<%= javascript_include_tag "application" %>
<%= javascript_pack_tag "client_only" %>
<%= javascript_pack_tag "client_and_server" %>

Getting React with Sprockets

reactjs/react-rails#715
get react in the correct version for each environment:

# config/environments/development.rb
MyApp::Application.configure do
  config.react.variant = :development
end

# config/environments/production.rb
MyApp::Application.configure do
  config.react.variant = :production
end

With ActionCable

cable.js must be loaded before hyperloop-loader!

JQuery support

Hyperloop offers some support code for integrating opal-jquery. To activate this code, opal jquery must be required on the client side before hyperloop-loader or hyper-component, example for using app/assets/application.rb: <- .rb

require 'jquery'
require 'opal-jquery'
require 'hyperloop-loader'

if using app/assets/application.js: <- .js

//= require 'jquery'
//= require 'opal-jquery'
Opal.load('opal-jquery');
//= require 'hyperloop-loader'

In General

minification with uglifier, in config/environments/production.rb:

  config.assets.js_compressor = Uglifier.new(
    :harmony => true
  )

For Heroku

something like:

# assets.rb
Rails.application.config.assets.configure do |env|
    env.cache = Sprockets::Cache::MemoryStore.new(40000)
end

this might be helpful:
https://help.heroku.com/18PI5RSY/how-do-i-clear-the-build-cache
also:

  • rails assets:clobber
  • rake tmp:clear

For Development

because of problems with sprockets cache design and FileStore a MemoryStore cache is recommended, just like for heroku above, maybe larger in size.

Possible Errors:

"#<ExecJS::ProgramError: TypeError: Cannot read property 'serverRender' of undefined>" when prerendering:
cause: react_ujs missing or imported to late

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions