我一直在尝试使用集成的React前端构建Rails API,并将其部署到Heroku。我正在使用create-react-app在Rails项目文件夹内名为“ client”的目录中构建React应用。我在localhost:3001上运行Rails api,在localhost:3000上运行React应用程序。当我将其部署到Heroku时,它可以工作,除非使用React Router URL并尝试刷新页面,或者尝试将URL复制并粘贴到浏览器中。在多个浏览器上的结果相同。例如,如果我转到根URL: https://appname.herokuapp.com将显示带有导航栏的React应用。如果我点击“文章”,它将带我到 https://appname.herokuapp.com/articles并显示“反应文章”页面。 但是,如果刷新浏览器,只会得到一个空白页面。如果我在浏览器中复制/粘贴此网址,也是如此。
我已按照三个独立的教程讲解了如何从2018年左右开始将Rails / React应用程序部署到Heroku。他们都提到了这个问题,并提供了完全相同的解决方案。
在app / controllers / application_controller.rb中添加以下操作:
def fallback_index_html
render :file => 'public/index.html'
end
然后在路线的底部添加此路线:
# config/routes.rb
get '*path', to: "application#fallback_index_html", constraints: ->(request) do
!request.xhr? && request.format.html?
end
他们都说这行得通。但是在尝试了三个在相同问题上均失败的单独教程之后,我很茫然。我知道在刷新页面上,应用程序正在查找Rails路由而不是React Router路由。上面的解决方案不起作用。也许Heroku,Rails或React发生了一些更改,导致它现在无法正常工作。我该如何解决?
答案 0 :(得分:0)
我不知道您是否还在寻找答案,但是您准确地描述了我的情况。我最终找到了对我有用的this帖子。
看来ActionController::API
无法渲染文件,但是ActionController::Base
可以渲染文件。因此,更改应用程序控制器的继承可能会解决它。上面链接的解决方案也提供了避免膨胀的建议。