Heroku路线上带有React应用程序的Rails无法刷新

时间:2019-07-03 05:24:22

标签: ruby-on-rails reactjs heroku react-router

我一直在尝试使用集成的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发生了一些更改,导致它现在无法正常工作。我该如何解决?

1 个答案:

答案 0 :(得分:0)

我不知道您是否还在寻找答案,但是您准确地描述了我的情况。我最终找到了对我有用的this帖子。

看来ActionController::API无法渲染文件,但是ActionController::Base可以渲染文件。因此,更改应用程序控制器的继承可能会解决它。上面链接的解决方案也提供了避免膨胀的建议。