最近几天,我一直在尝试在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。
非常感谢您的帮助!
答案 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
,不要忘记提交),它应该可以工作。