Class: ReactOnRails::ServerRenderingPool
- Inherits:
-
Object
- Object
- ReactOnRails::ServerRenderingPool
- Defined in:
- lib/react_on_rails/server_rendering_pool.rb
Class Method Summary collapse
- .reset_pool ⇒ Object
- .reset_pool_if_server_bundle_was_modified ⇒ Object
-
.server_render_js_with_console_logging(js_code) ⇒ Object
js_code: JavaScript expression that returns a string.
Class Method Details
.reset_pool ⇒ Object
8 9 10 11 12 |
# File 'lib/react_on_rails/server_rendering_pool.rb', line 8 def self.reset_pool = { size: ReactOnRails.configuration.server_renderer_pool_size, timeout: ReactOnRails.configuration.server_renderer_pool_size } @js_context_pool = ConnectionPool.new() { create_js_context } end |
.reset_pool_if_server_bundle_was_modified ⇒ Object
14 15 16 17 18 19 20 21 |
# File 'lib/react_on_rails/server_rendering_pool.rb', line 14 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) @server_bundle_timestamp ||= file_mtime return if @server_bundle_timestamp == file_mtime ReactOnRails::ServerRenderingPool.reset_pool @server_bundle_timestamp = file_mtime end |
.server_render_js_with_console_logging(js_code) ⇒ Object
js_code: JavaScript expression that returns a string. Returns a Hash:
html: string of HTML for direct insertion on the page by evaluating js_code
consoleReplayScript: script for replaying console
hasErrors: true if server rendering errors
Note, js_code does not have to be based on React. js_code MUST RETURN json stringify Object Calling code will probably call ‘html_safe’ on return value before rendering to the view.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/react_on_rails/server_rendering_pool.rb', line 31 def self.server_render_js_with_console_logging(js_code) trace_messsage(js_code) json_string = eval_js(js_code) result = JSON.parse(json_string) if ReactOnRails.configuration.logging_on_server console_script = result["consoleReplayScript"] console_script_lines = console_script.split("\n") console_script_lines = console_script_lines[2..-2] re = /console\.log\.apply\(console, \["\[SERVER\] (?<msg>.*)"\]\);/ if console_script_lines console_script_lines.each do |line| match = re.match(line) Rails.logger.info { "[react_on_rails] #{match[:msg]}" } if match end end end result end |