【问题标题】:Ruby on Rails website worked locally, routes correct, but on heroku get 404Ruby on Rails 网站在本地工作,路线正确,但在 heroku 上得到 404
【发布时间】:2017-04-17 23:48:48
【问题描述】:

这是我遇到的一个非常奇怪的错误。我在轨道上使用红宝石。在本地(在云 9 上)一切正常,我成功地将其推送到 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

还有其他可能导致此问题的原因吗?

【问题讨论】:

  • 欢迎使用stackoverflow,请将相关代码和日志作为文本添加到问题本身。不是截图。工具栏上有一个{} 按钮,用于将文本格式化为代码。
  • @Xlsaax 我在 Heroku 日志中没有看到堆栈跟踪或任何有用的信息。是否有类似 WEBrick 错误的堆栈跟踪?

标签: ruby-on-rails ruby heroku routes


【解决方案1】:

问题是您没有设置根路由,这意味着当有人在没有任何路径的情况下访问 www.example.com 时,他们将进入根路由。在您的路线文件中添加类似

root 'application#index'

或您希望人们在首次访问您的网站时访问的任何控制器和操作以及相应的视图。

【讨论】:

  • 在我的路由文件中,我已经有了root 'application#index',但网站仍然无法运行;我也尝试过 /benchmark、/indexupdate (在我的路线中)但无济于事。我认为路线肯定有问题,但我真的找不到任何路线,它在本地工作
  • 根据您的日志,缺少根路由是您的 404 错误的原因。但可能还有其他问题。尝试加载 Puma gem。 Webrick 不适合在生产环境中使用。
【解决方案2】:

好吧,一方面,您不应该在生产环境中运行 WEBrick。我不肯定这是否会导致您的错误,但我会从那里开始。

Heroku 目前推荐puma

您可以通过将 puma 包含在您的 Gemfile 中作为 gem 'puma' 然后运行 ​​bundle install 来安装 puma。

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

确保Procfile 正确大写并签入git。

它应该看起来像这样:

# <Rails.root>/Procfile
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}

这是一篇关于 WEBrick 的文章和一篇关于 how to set up puma 的文章。

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

【讨论】:

  • 根据您遇到的错误,@SteveCarey 对我来说似乎是正确的,但我将留下我的答案,因为您绝对应该在生产中换掉 WEBrick! :-)
  • 嗨,我已经换到 Puma,但我仍然遇到同样的错误。是否有可能我的路由文件(正确)未被服务器使用或加载,因此服务器不知道导致错误的路由?这怎么可能呢?
  • 是的: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
猜你喜欢
  • 2015-08-16
  • 2011-10-11
  • 2012-07-17
  • 1970-01-01
  • 2012-11-05
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多