class RailsRenderService::Renderer
Public Class Methods
client()
click to toggle source
# File lib/rails_render_service/renderer.rb, line 18 def self.client NetX::HTTPUnix.new server_uri end
has_template(key)
click to toggle source
# File lib/rails_render_service/renderer.rb, line 34 def self.has_template(key) with_retry do req = Net::HTTP::Get.new "/#{key}" res = client.request req case res.code when '200' then true when '404' then false else puts res.body raise "Attempt to find `#{key}` resulted in an error response from the rendering service" end end end
render_template(json)
click to toggle source
# File lib/rails_render_service/renderer.rb, line 48 def self.render_template(json) with_retry do req = Net::HTTP::Post.new "/", initheader = {'Content-Type'=>'application/json'} req.body = json res = client.request req case res.code when '200' then res.body when '404' then raise "Missing React template for `#{JSON.parse(req.body)['name']}`" else puts res.body raise "Attempt to render `#{JSON.parse(req.body)['name']}` resulted in an error response from the rendering service" end end end
server_uri()
click to toggle source
def self.start
pid = spawn("NODE_ENV=#{Rails.env} npm run #{Rails.env}") trap('TERM') do kill pid shutdown() end
end
# File lib/rails_render_service/renderer.rb, line 14 def self.server_uri @@server_uri ||= Rails.application.config.rails_render_service.get_uri.call end
with_retry(backoff_times = [0.2, 0.5, 1, 2, 3, 4, 5]) { |block| ... }
click to toggle source
# File lib/rails_render_service/renderer.rb, line 22 def self.with_retry(backoff_times = [0.2, 0.5, 1, 2, 3, 4, 5], &block) begin yield block rescue Errno::ECONNREFUSED, Errno::ENOENT => e raise e if backoff_times.empty? backoff_time = backoff_times.shift puts "Waiting for render service. Retry in #{backoff_time}s..." sleep backoff_time retry end end