Skip to content

Commit

Permalink
Merge pull request #75 from rstudner/server-reload-bundle-fix
Browse files Browse the repository at this point in the history
Server reload bundle fix
  • Loading branch information
justin808 committed Nov 5, 2015
2 parents 08dd095 + 115430d commit 1044c8e
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 5 deletions.
3 changes: 3 additions & 0 deletions app/helpers/react_on_rails_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,9 @@ def next_react_component_index
def server_rendered_react_component_html(options, props_string, react_component_name, data_variable_name, dom_id)
return ["", ""] unless prerender(options)

# Make sure that we use up-to-date server-bundle
ReactOnRails::ServerRenderingPool.reset_pool_if_server_bundle_was_modified

wrapper_js = <<-JS
(function() {
var props = #{props_string};
Expand Down
19 changes: 14 additions & 5 deletions lib/react_on_rails/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,21 @@ def self.configuration
logging_on_server: true,
generator_function: false,
trace: Rails.env.development?,
development_mode: Rails.env.development?,
server_renderer_pool_size: 1,
server_renderer_timeout: 20)
end

class Configuration
attr_accessor :server_bundle_js_file, :prerender, :replay_console, :generator_function, :trace,
:logging_on_server, :server_renderer_pool_size, :server_renderer_timeout
attr_accessor :server_bundle_js_file, :prerender, :replay_console,
:generator_function, :trace, :development_mode,
:logging_on_server, :server_renderer_pool_size,
:server_renderer_timeout

def initialize(server_bundle_js_file: nil, prerender: nil, replay_console: nil,
generator_function: nil, trace: nil, logging_on_server: nil,
server_renderer_pool_size: nil, server_renderer_timeout: nil)
generator_function: nil, trace: nil, development_mode: nil,
logging_on_server: nil, server_renderer_pool_size: nil,
server_renderer_timeout: nil)
if File.exist?(server_bundle_js_file)
self.server_bundle_js_file = server_bundle_js_file
else
Expand All @@ -32,10 +36,15 @@ def initialize(server_bundle_js_file: nil, prerender: nil, replay_console: nil,
self.replay_console = replay_console
self.logging_on_server = logging_on_server
self.generator_function = generator_function
if development_mode.nil?
self.development_mode = Rails.env.development?
else
self.development_mode = development_mode
end
self.trace = trace.nil? ? Rails.env.development? : trace

# Server rendering:
self.server_renderer_pool_size = server_renderer_pool_size # increase if you're on JRuby
self.server_renderer_pool_size = self.development_mode ? 1 : server_renderer_pool_size
self.server_renderer_timeout = server_renderer_timeout # seconds
end
end
Expand Down
9 changes: 9 additions & 0 deletions lib/react_on_rails/server_rendering_pool.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ def self.reset_pool
@js_context_pool = ConnectionPool.new(options) { create_js_context }
end

def self.reset_pool_if_server_bundle_was_modified
return unless ReactOnRails.configuration.development_mode
file_mtime = File.mtime(ReactOnRails.configuration.server_bundle_js_file)
first_time = @server_bundle_timestamp.nil?
return if first_time || @server_bundle_timestamp == file_mtime
ReactOnRails::ServerRenderingPool.reset_pool
@server_bundle_timestamp = file_mtime
end

class PrerenderError < RuntimeError
def initialize(component_name, props, js_message)
message = ["Encountered error \"#{js_message}\" when prerendering #{component_name} with #{props}",
Expand Down

0 comments on commit 1044c8e

Please sign in to comment.