0

Моя серверная сторона - рельсы, и я использую ретрансляторы с обработкой на стороне сервера (prerender: true). Недавно начали использовать ретрансляцию с реле-маршрутизатором-реле, но с этим, рендеринг на стороне сервера больше невозможен, поскольку, по-видимому, получение данных связано с связью с сервером graphql, который включает таймауты и т. Д., Которые недоступны при рендеринге сервера. Поэтому я предполагаю, что должен быть способ предварительно вставить данные в хранилище ретрансляторов на стороне сервера, чтобы избежать вызова графика. Я нашел эту библиотеку: https://github.com/denvned/isomorphic-relay-router, но я не могу использовать ее, поскольку она несовместима с использованием ретрансляторов (например, у меня нет приложения app.get в любом месте моего приложения, поэтому нет возможности использовать эту функцию соответствия там). Любая идея о том, как сделать эту работу?рендеринг на стороне сервера с реле-ретранслятором и ретранслятором

ответ

4

У нас возникла аналогичная проблема. Посмотрите, как мы работаем с рельсами. Хотя я бы не рекомендовал это делать ...

Проверьте это: https://github.com/brandfolder/rails-graphql-relay

UPDATE:

Мы столкнулись с рядом проблем с блокирующей природой рубина. Чтобы обойти это, нам пришлось взломать решение, в котором мы обменивались узлом как часть нашего приложения.

То, что мы сделали вместо этого построить 3 приложения:

1) JSONAPI совместимый публичный API, который инкапсулирует все наши бизнес-логики. https://api.brandfolder.com/v2/docs, основанный на https://github.com/brandfolder/jsonapionify

2) Сервер GraphQL, который говорит с нашим API JSON. Примечание. Я настоятельно рекомендую express-graphql (node). Из-за асинхронного/неблокирующего характера узла express-graphql способен одновременно выполнять множественные вызовы для нашего API, а не блокировать их в рубине. https://github.com/brandfolder/graphqlify

3) Приложение, которое обслуживает наше приложение React/Relay. Это просто конвейер активов с браузером, чтобы обслуживать наш код реакции. Это также содержит код для обработки нашей серверной рендеринга с помощью ReactDOMServer. [private repository]

Это, вероятно, более сложный пример, чем вы ищите, но это позволяет использовать высокодоступное приложение для создания исполнителей. В вашем случае вы можете легко уйти, имея 2 приложения, сервер GraphQL и код переднего конца. Это позволит компиляции переднего конца, не беспокоясь о блокировке сервера GraphQL в рубине.

+0

Большое спасибо! Почему вы не рекомендовали бы это делать? Что бы вы улучшили? Любые другие альтернативы? – shaimo