2016-07-25 16 views
0

Meine Organisation erwägt, einen vorhandenen Rails-Monolith als eine Sammlung von Rails-Services zu implementieren. Für die Content-Schicht war unser Gedanke, dass unser API-Gateway die Layout-Informationen für die gesamte App enthalten und individuelle Ansichten über HTTP anfordern würde. Einzelne Dienste würden dann ihre Vorlagen wiedergeben und sie über HTTP als gerenderten HTML-Code zurückschicken.Remote-Ansicht im lokalen Layout rendern

Meine Frage ist das: Gibt es einen Mechanismus in Rails, um Remote-Inhalte über HTTP anzufordern, den empfangenen HTML-Code in eine ERB/​​HAML-Layoutvorlage zu rendern und dann das vollständig gerenderte HTML zu liefern?

Antwort

0

Möchten Sie diese Informationen in einem Controller anfordern und dann als String in einer ERB-Vorlage ausgeben?

Gibt es eine andere Anforderung, die ich vermisse?

-Controller

def index 
    @content = body_of_request_to_service 
end 

Ansicht

... 
<%= @content %> 
... 

Aber ich würde diese Art von Microservice nicht empfehlen Rubin mit (wenn Sie ein Entwickler-Team, das versteht, wie man Handle Async Ruby IO). Eine gute Faustregel ist, dass nur eine blockierende Serviceanforderung pro Clientanforderung vorliegt.

0

Wenn Sie eine Vorlage in Rails rendern, werden Sie durch nichts davon eingeschränkt, woher das Markup stammt. Regelmäßig würde es von einer lokal gefundenen *.html.erb Vorlage kommen.

Wenn ein vorgerenderten html Stück von einer externen Quelle kommt, kann man dies tun:

render html: my_html_string.html_safe 

Wenn Sie ein Layout, dann:

render html: my_html_string.html_safe, layout: 'my_layout' 

Die my_html_string durch die bedient werden konnte externe Quelle entweder mit HTML-Format-Renderer oder als String, der später serialisiert werden soll, zB auf json.

@my_html_string = render_to_string(
    template: 'templates/my_template.html.erb', 
    layout: false 
)