我正在开发一个使用 React 作为客户端、Rails API 作为服务器的应用程序。我想让客户端和服务器尽可能分开(现在它们位于完全不同的存储库中)。
React 客户端是使用 create-react-app 创建的,当前使用 package.json 文件中的 proxy 选项调用 API,如下所示:
"proxy": "http://localhost:3001/"
Localhost 3001 是我的 Rails API 的位置。显然这在生产中行不通。
如何将其部署到 Heroku,同时仍然让客户端可以访问服务器?我可以部署两个不同的 Heroku 应用程序,并以某种方式将客户端的应用程序代理请求发送到服务器的应用程序吗?或者我是否必须将客户端包含在我的 Rails 项目中并将其全部部署在一起?
最佳答案
我以前做过这个。我按照您在问题中建议的方式开始,构建了 React 应用程序并将其包含在我的 Rails 项目中并部署了整个项目。这工作得很好,但我不想每次想要部署前端应用程序时都重新部署后端 api。
所以我在我的 Rails 应用程序中创建了一个名为 FrontEndAppVersion
的模型。我给了这个模型两列:
- version - 您通常看到的语义版本字符串
- active - 一个 bool 值,指示它是否是事件版本(一次只能有一个记录处于事件状态)
然后,我有一个最小的 Rails View 渲染,它将查找事件的 FrontEndAppVersion
并链接到适当的 js 和 css 文件。
在我的 React 应用程序中,我使用 gulp 打包应用程序并将其推送到云前端,这是我的 Rails 应用程序链接到的地方。除了将 React 文件发送到云前端之外,我还让它向我的 Rails 后端应用程序发出 api 请求,让它知道有新版本可用并使其成为事件版本。
这可能有点过头了,但它也让我可以轻松回滚版本。我可以通过使用不同的 FrontEndAppVersion
记录事件应用程序来仅回滚客户端应用程序,而不是回滚 Heroku。
无论采用哪种方式,在构建代理时都需要更改代理,并且如果两个应用程序位于同一域中,则只需使用 /
。
关于ruby-on-rails - 如何将 React 应用程序和 Rails API 部署到 Heroku?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657694/