Ruby on rails RubyonRails网站在本地运行,路由正确,但在heroku上获得404

Ruby on rails RubyonRails网站在本地运行,路由正确,但在heroku上获得404,ruby-on-rails,ruby,heroku,routes,Ruby On Rails,Ruby,Heroku,Routes,这是我遇到的一个非常奇怪的错误。我使用RubyonRails。在本地(Cloud9上)一切都很好,我成功地将它推到了Heroku。我已经运行了db:migrate,没有错误。尽管如此,我还是得到了一个错误“你要找的页面不存在”,日志上写着404。我已经检查了文件,它们已经正确上传。 我的路线: root 'application#index' get '/index/:type' => 'application#index' get '/index/' => 'appli

这是我遇到的一个非常奇怪的错误。我使用RubyonRails。在本地(Cloud9上)一切都很好,我成功地将它推到了Heroku。我已经运行了db:migrate,没有错误。尽管如此,我还是得到了一个错误“你要找的页面不存在”,日志上写着404。我已经检查了文件,它们已经正确上传。 我的路线:

  root 'application#index'
  get '/index/:type' => 'application#index'
  get '/index/' => 'application#index'
  get '/benchmark/' => 'application#benchmark'
  get '/benchmark/:type' => 'application#benchmark'
  get '/benchmarkupdate/:name' => 'application#benchmark'
  get '/indexupdate/:name' => 'application#index'
我有文件在正确的位置。我看不出路由有任何问题,它在本地工作

Heroku日志:

2017-04-18T03:13:14.455398+00:00 app[web.1]: * Version 3.8.2 (ruby 2.3.4-p301), codename: Sassy Salamander
2017-04-18T03:13:14.455399+00:00 app[web.1]: * Min threads: 5, max threads: 5
2017-04-18T03:13:14.455399+00:00 app[web.1]: * Environment: production
2017-04-18T03:13:15.493228+00:00 app[web.1]: DEPRECATION WARNING: `config.serve_static_files` is deprecated and will be removed in Rails 5.1.
2017-04-18T03:13:15.493241+00:00 app[web.1]: Please use `config.public_file_server.enabled = true` instead.
2017-04-18T03:13:15.493243+00:00 app[web.1]:  (called from block in <top (required)> at /app/config/environments/production.rb:25)
2017-04-18T03:13:16.337785+00:00 app[web.1]: * Listening on tcp://0.0.0.0:49146
2017-04-18T03:13:16.337997+00:00 app[web.1]: Use Ctrl-C to stop
2017-04-18T03:13:16.847301+00:00 heroku[web.1]: State changed from starting to up
2017-04-18T03:13:18.094441+00:00 heroku[router]: at=info method=GET path="/" host=protected-coast-54392.herokuapp.com request_id=3d8c7a3f-3f40-4747-862f-7e70e7c9029e fwd="152.3.34.25" dyno=web.1 connect=1ms service=75ms status=404 bytes=1744 protocol=https
2017-04-18T03:13:14.455398+00:00应用程序[web.1]:*版本3.8.2(ruby 2.3.4-p301),代号:Sassy Salander
2017-04-18T03:13:14.455399+00:00应用程序[web.1]:*最小线程数:5,最大线程数:5
2017-04-18T03:13:14.455399+00:00应用程序[web.1]:*环境:生产
2017-04-18T03:13:15.493228+00:00应用程序[web.1]:弃用警告:“config.serve\u static\u files”已弃用,将在Rails 5.1中删除。
2017-04-18T03:13:15.493241+00:00应用程序[web.1]:请改用'config.public_file_server.enabled=true'。
2017-04-18T03:13:15.493243+00:00应用程序[web.1]:(从at/app/config/environments/production.rb:25中的块调用)
2017-04-18T03:13:16.337785+00:00应用程序[web.1]:*收听tcp://0.0.0.0:49146
2017-04-18T03:13:16.337997+00:00应用程序[web.1]:使用Ctrl-C停止
2017-04-18T03:13:16.847301+00:00 heroku[web.1]:状态从启动更改为启动
2017-04-18T03:13:18.094441+00:00 heroku[路由器]:at=info method=GET path=“/”host=protected-coast-54392.herokuapp.com请求\u id=3d8c7a3f-3f40-4747-862f-7e70e7c9029e fwd=“152.3.34.25”dyno=web.1 connect=1ms服务=75ms状态=404字节=1744协议=https

是否还有其他原因可能导致此问题?

问题在于您没有设置根路由,这意味着当有人访问www.example.com后没有任何路径时,他们将访问根路由。在routes文件中添加如下内容

root 'application#index'

或者您希望人们第一次访问您的站点时访问的任何控制器和操作以及相应的视图。

首先,您不应该在生产环境中运行WEBrick。我不确定这是否导致了你的错误,但我从这里开始

Heroku目前推荐
puma

您可以通过将它作为
gem'puma'
包含在
gem文件中,然后运行bundle安装来安装puma

在项目目录中,您需要包含一个
Procfile
,告诉您的应用程序如何运行其web服务器

确保
Procfile
正确大写并签入git

它应该是这样的:

# <Rails.root>/Procfile
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
#/Procfile
web:bundle exec puma-t5:5-p${PORT:-3000}-e${RACK_ENV:-development}
这里有一篇关于和关于的文章


你需要重新推到heroku。看看这是否有帮助。干杯。

欢迎来到stackoverflow,请将相关代码和日志作为文本添加到问题本身。不是截图。工具栏上有一个
{}
按钮,将文本格式化为代码。@Xlsaax我在Heroku日志中没有看到堆栈跟踪或任何有用的东西。是否存在与WEBrick错误类似的堆栈跟踪?根据您得到的错误,我认为@SteveCarey是正确的,但我将留下我的答案,因为您肯定应该在生产中交换WEBrick!:-)嗨,我已经换了彪马,但我仍然遇到同样的错误。服务器是否可能没有使用或加载我的路由文件(正确),因此服务器不知道路由,从而导致错误?这怎么可能呢?是的:
2017-04-18T01:22:28.050384+00:00 heroku[router]:at=info method=GET path=“/”host=protected-coast-54392.herokuapp.com request_id=9bdcf557-2ed8-4a46-b013-b16866fa4c5b fwd=“152.3.34.25”dyno=web.1 connect=0ms service=99ms status=404 bytes=1744 protocol=https
,在我的路由文件中,我已经有了根“应用程序#索引”,但该网站仍然无法运行;我还尝试了/benchmark、/indexupdate(在我的路线中),但没有成功。我认为路由肯定有问题,但我真的找不到任何错误,而且它在本地工作。根据您的日志,缺少根路由是导致404错误的原因。但可能还有其他问题。试着装上美洲狮的宝石。Webrick不打算用于生产。