【问题标题】:Heroku giving 500 error with little information + asset files are empty [Rails]Heroku 在信息很少的情况下给出 500 错误 + 资产文件为空 [Rails]
【发布时间】:2014-11-03 10:08:59
【问题描述】:

我刚刚将我正在开发的 Rails 应用程序部署到 Heroku - http://sports-site.herokuapp.com/

这里是更新后的 GitHub -https://github.com/adamzerner/sports_site

  1. application-*.cssapplication-*.js 在生产中都是空的,但 CSS 和 JS 在开发中可以完美运行。

  2. 我访问的几乎每个页面(除了主页和疯狂的排名页面)都会给我一个 500 错误。日志几乎没有给我任何信息。以下是我得到的全部内容:

    2014-09-09T21:34:09.019757+00:00 heroku[router]: at=info method=GET path="/spurs" host=pure-everglades-8286.herokuapp.com request_id=d6a0348f-db82-4519-844d-d85973c75413 fwd="67.86.210.96" dyno=web.1 connect=1ms service=11ms status=500 bytes=1002 2014-09-09T21:34:09.323769+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=pure-everglades-8286.herokuapp.com request_id=934ea050-cbab-4c26-b925-5bc5f2d16369 fwd="67.86.210.96" dyno=web.1 connect=1ms service=9ms status=500 bytes=858

我该如何解决这两个问题?

编辑:我认为这两个问题可能相关。当我打开 Chrome 的开发工具并转到资源选项卡时,它说:

Failed to load resource: the server responded with a status of 500 (Internal Server Error

下面

<link data-turbolinks-track="true" href="/assets/application-1babc5fe447a141359d73e5a3339663c.css" media="all" rel="stylesheet" />

<script data-turbolinks-track="true" src="/assets/application-f3556e3d9d239b5384897deb4b41e10f.js"></script>

编辑

当我转到 http://sports-site.herokuapp.com/trailblazers/lamarcus_aldridge 时,我收到此错误。

undefined method `name' for nil:NilClass

参考这一行

<h1><%= @player.name %> <small><%= link_to "#{@player.team.location} #{@player.team.name}", "/#{@player.team.name.downcase}" %></small></h1>

我不明白为什么会这样。我不知道它是说playernil 还是teamnil,但根据这个控制台输出似乎都不是:

`2.1.2 :001 > l = Player.where("name like ?", "%lamarcus_aldridge%")[0]
Player Load (14.8ms)  SELECT "players".* FROM "players"  WHERE (name like '%lamarcus_aldridge%')
 => #<Player id: 383, team_id: 29, position_id: 4, position_rank: 2, overall_rank: 6, analysis: "Star player.|\n\tGood size and strengt
.
.
.
2.1.2 :002 > l.name
 => "LaMarcus Aldridge"
2.1.2 :003 > l.team.name
  Team Load (0.4ms)  SELECT  "teams".* FROM "teams"  WHERE "teams"."id" = ? LIMIT 1  [["id", 29]]
 => "Trailblazers"`

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    Heroku 500 错误是标准 Heroku 错误。您必须检查日志以获取实际错误。 下面的链接将为您提供有关 Heroku 放入日志的错误的更多信息。 https://devcenter.heroku.com/articles/error-codes

    在终端 cd 中进入您的应用程序并输入 heroku logs --tail 这将为您提供实时日志。

    【讨论】:

    • 我就是这么做的。我上面发布的是转到 url http://pure-everglades-8286.herokuapp.com/spurs 时的日志输出。
    【解决方案2】:

    您的应用加载正常,这意味着您的问题很可能是应用本身内部的一个小问题。

    让我帮你调试:


    错误

    由于 Heroku 是一个平台即服务,它会显示两种类型的错误 -

    1. 平台(“Heroku”)错误
    2. 语法(“Rails”)错误

    为了确保您能够正常工作,您需要了解这两种类型的错误以及如何解决它们:

    -

    Heroku

    这是一个 Heroku 错误 - 由 Heroku 平台本身的问题引起。如果您遇到此错误,则意味着您的应用程序根本无法运行,因为您遇到了 Heroku 的问题。这里可能的问题是 Heroku 没有正确的数据库/配置凭据,导致它无法加载您的应用程序

    如果您遇到 Heroku 错误,则意味着您必须正确设置应用程序。幸运的是,你没有这个,这意味着你可以专注于下一类错误:

    -

    导轨

    Rails 错误就是你所拥有的。

    基本上,这是您的应用程序在 Heroku 平台上运行良好,但 Rails 后端出现问题的情况。问题可能是系统性的(与系统有关)或“语法”(与您的语法有关)

    要修复这些错误,您需要确保所有文件、依赖项和ENV 变量设置正确。


    修复

    查看您的应用程序,可能有更深层次的问题需要解决。

    我最初认为这可能是您的资产有问题,但由于您的其他页面也显示错误,我们需要确定问题所在。

    您可以做的最简单的事情是为 Heroku 开启 development 环境:

    #config/environments/production.rb
    config.consider_all_requests_local       = true # false
    
    > $ git add .
    > $ git commit -a -m "Local Debug"
    > $ git push heroku master
    

    您必须在调试后将其改回

    这将使您能够真正看到错误是什么。我猜这要么是控制器问题,要么与数据库数据有关(也许你推送到 Heroku 时还没有迁移)等等。

    如果您使用上述方法,请将您的代码推送到 Heroku,您将能够看到您的应用正在调用的错误。反过来,这将允许您专门解决问题

    到目前为止,这是我能用你提供的东西做的最好的事情。如果您更新我们的问题,我将能够更好地提供具体建议!

    【讨论】:

    • 非常感谢您的帮助! 1) 我确实忘记运行heroku run rake db:migrateheroku run rake db:seed。我运行了它们,它似乎解决了一些问题。 2)我按照你说的做了,现在它像在开发中一样向我显示错误。请参阅我的问题的编辑。此外,资产仍未加载。
    • 跟我的data文件夹有关系吗?
    • 它不应该与这个问题有任何关系——你认为它会导致什么问题?
    • 只是为了清楚.. 我应该创建一个文件config/environments/production.rb 并且只插入config.consider_all_requests_local = true # false 然后推送它吗?是否应该修复,以便我现在在 FE 或日志中看到错误?我仍然只在日志中看到 500 错误并且没有详细信息,并且 FE 只是相同的 500 服务器错误
    【解决方案3】:

    关于您的第二个问题,当您更改 Rails 应用程序环境时,这也会更改它连接的数据库。那么首先,你确定你在同一个环境下运行应用程序和 Rails 控制台吗?

    话虽如此,我们需要查看您的控制器操作(您设置@player 的位置)。您从控制台粘贴的 sn-p 并不意味着您在控制器中正确执行此操作。

    【讨论】:

    • 查看 github 上的代码 - github.com/adamzerner/sports_site。我对环境真的不是很了解,所以不知道它们是不是在同一个环境中。
    • 我使用 postgres 进行生产,使用 sqlite3 进行开发。见我的Gemfile
    • 会不会和data folder有关?
    • 我猜你正在从你的开发机器上运行 rails 控制台。 LIKE 运算符需要表排序规则不区分大小写(例如 utf8_ci)。如果我去sports-site.herokuapp.com/trailblazers/LaMarcus_Aldridge,则错误丢失(除了资产错误)。您需要将数据库排序规则更改为不区分大小写,或在编写 URL 时尊重大小写。
    • 您的资产错误是因为您的routes.rb 文件中的最后一个路由正在捕获资产的路由。所以,如果我尝试sports-site.herokuapp.com/assets/…,我会得到Missing template error,因为路由器将资产映射为 :team 并将 application-0d909944082bda4534cffeb29f27350e.css 映射为 :player
    猜你喜欢
    • 2018-02-11
    • 2015-03-26
    • 2018-01-09
    • 2013-09-04
    • 2017-03-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多