У меня есть приложение Next.JS с React и клиентом Apollo, которое странно ведет себя при развертывании в Heroku.Единственное объяснение, которое соответствует тому, что я вижу, это то, что переменные конфигурации Heroku установлены недостаточно рано для выполнения рендеринга на стороне сервера.
Я установил конфигурационную переменную с именем API_URL (которая является адресом API-интерфейса GraphQL) и использую его при настройке клиента Apollo, например:
import withApollo from "next-with-apollo";
import ApolloClient, { InMemoryCache } from "apollo-boost";
export default withApollo(({ ctx, headers, initialState }) => {
// Logging to double check the API_URL
console.log(`process.env.API_URL: ${process.env.API_URL}`);
return new ApolloClient({
uri: process.env.API_URL,
cache: new InMemoryCache().restore(initialState || {})
});
});
Затем _app.tsx оборачивается компонентом withApollo, например:
// ...imports
class MyApp extends App {
render() {
const { Component, pageProps, apollo } = this.props;
return (
<Container>
<ApolloProvider client={apollo}>
<ThemeProvider theme={theme}>
<Component {...pageProps} />
</ThemeProvider>
</ApolloProvider>
</Container>
);
}
}
export default withApollo(MyApp);
Все согласнопример установки на next-with-apollo .
Все это прекрасно работает на локальном хосте, но при работе на Heroku это приводит к ошибке 501.В конфигурации Heroku var API_URL установлено (я трижды проверил панель управления Heroku).
Добавленная регистрация в withApollo
показывает, что process.env.API_URL
является ожидаемым значением на локальном хосте, но undefined
при работе на Heroku.
Я также пытался использовать функцию Next.JS getInitialProps
для выполнения рендеринга на стороне сервера и получения тех же результатов, консоль регистрации конфигурации конфигурации Heroku показывает, что она всегда undefined
.
Выполнено запросовпосле загрузки страницы это поведение вообще не отображается.
Наконец, когда везде используется значение по умолчанию для значения конфигурации, например, uri = process.env.API_URL || "https://hardcoded.url/"
, все работает как шарм.
Не стоит ли ожидатьэто на работу?Мне кажется, что Heroku просто не устанавливает переменные конфигурации вовремя, чтобы использовать их при рендеринге на стороне сервера?