【发布时间】:2018-11-16 01:21:17
【问题描述】:
过去几天我一直在尝试在 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。
非常感谢任何帮助!
【问题讨论】:
-
默认情况下,Rails 将在应用程序视图目录中查找。具体来说,它将寻找一个名为
welcome的文件夹,因此app/views/welcome有一个名为index.html.erb的文件,最终结果是app/views/welcome/index.html.erb,这是Rails 所期望的。如果你看一下路线,root 'welcome#index'会很有意义,所以welcome是视图目录中的文件夹,index.html.erb是它要查找的文件。 -
你试过
/index吗? -
@RockwellRice 不会根 'welcome#index' 路由到我的欢迎控制器中的 index 方法吗?我有指向它应该呈现的文件。
-
@SimonBrazell 我应该把 /index 放在哪里?不明白你的意思抱歉!
标签: ruby-on-rails heroku deployment