无法让Heroku服务于公共index.html页面

时间:2018-11-16 01:21:18

标签: ruby-on-rails heroku deployment

最近几天,我一直在尝试在Heroku上启动我的项目https://github.com/robdrosenberg/news-hunt,而Heroku不会为我的public / index.html页面提供服务。

这是我当前遇到的错误:

ActionController::RoutingError (No route matches [GET] "/")

此错误已在StackOverflow上引发,我已经尝试了尽可能多的解决方案。

例如,直接通过欢迎控制器路由到文件也会给我一个错误

路线

Rails.application.routes.draw do
  post 'user_token' => 'user_token#create'
  post 'users' => 'users#create'
  namespace :api do
    get 'reddit' => 'posts#reddit'
    get 'producthunt' => 'posts#producthunt'
    get 'medium' => 'posts#medium'
    get 'hackernews' => 'posts#hackernews'
    get 'githubtrending' => 'posts#githubtrending'
    get 'all' => 'posts#all'
    get 'bookmarks' => 'bookmarks#index'
    post 'bookmarks' => 'bookmarks#create'
    delete 'bookmarks' => 'bookmarks#destroy'
  end
  root 'welcome#index'
end

控制器

class WelcomeController < ApplicationController
  def index
    render file: Rails.root.join('public','index.html')
  end
end

错误

ActionView::MissingTemplate (Missing template public/index.html with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in: app/app/views

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?更改为= true并没有改变。

我尝试使用重定向,这导致应用因过多的重定向而崩溃。

我发现奇怪的是,当我尝试直接渲染文件时,它在app / views文件夹中搜索。一切在本地都能正常运行,因此必须与生产环境和Heroku保持一致。

我在API模式下使用Rails,并在index.html文件中通过CDN使用Vue。

我以相同的方式部署了另一个项目,没有任何问题。您可以在以下位置找到该代码库:https://github.com/robdrosenberg/commitment-ledger

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

尝试将其添加到您的config/routes.rb文件中:

get '', to: redirect('/Index.html')

这样,对应用程序根目录的请求将重定向到公用文件夹中的索引文件。

如下所述,您已使用大写的“ I”命名文件,在上面的重定向中引用该文件时,需要使用相同的大小写。

答案 1 :(得分:0)

您是否有理由要重定向到public / index?当然,我不知道您的应用程序,因此这可能无济于事。您是否考虑过将index.html文件移动到views / welcome目录?这是welcome#index方法将从中呈现文件的默认位置。

答案 2 :(得分:0)

该存储库中实际上没有public/index.html页,而是public/Index.html(请注意“ i”和“ I”的情况)。如果您是在Windows或Mac上进行开发,则不会有太大区别,但在Linux(用于Heroku的Linux)上,它们将被视为不同的文件。

将文件重命名为index.html(使用git mv,不要忘记提交),它应该可以工作。