2

我在托管的 ruby​​ on rails 应用程序上遇到问题Heroku。无论我向 repo 推送什么,我都会收到一个Internal Server Error字符串,其中没有关于我做错了什么的额外信息。

Internal Server Error我决定做的每一个改变都会在当地很好地工作,但每次我推动时我似乎都无法避免这种情况。我必须不断回滚并找出我需要解决的问题才能阻止这种情况发生。

有人对我有什么建议吗?

更新

我将 repo 回滚到一个稳定的变更集,然后将 repo 克隆到我机器上的另一个目录。我对一个 javascript 文件做了一个小改动来修复一个小错误,即使是那个推送也导致了网站宕机并给出了Internal Server Error消息。我的环境有问题吗?

更新 2

对于最近给出答案的人,请查看对问题的评论,因为您的一些建议已经得到解决。谢谢!

回答:

我不得不承认,我仍然不明白为什么事情会这样,但是在不破坏站点的情况下似乎可以很好地推送的提交包括 Rubymine 似乎并不介意的三元运算符。在某一点之后,每次提交都会导致此问题Internal Server Error。但是在将三元运算符转换回if-else-end条件语句后,这种行为就停止了。我希望这对将来有类似问题的人有所帮助,尽管很模糊。

4

3 回答 3

2

我从日志中看到的主要问题是

!! Unexpected error while processing request: can't modify frozen array

快速谷歌搜索“rails production can't modify frozen array”在 SO 上给出了这个相关问题(也关于 heroku。)

您可以做的其他事情:

  1. 运行heroku run script/rails console并注意错误。
  2. 在您的开发机器上安装 postgresql 并在生产模式下进行整个测试运行。这意味着运行rake db:load_schema, rake assets:precompile, 和rails s前缀RAILS_ENV=production。确保您正在使用thin.
  3. 启动一个镜像 Heroku 设置的 VM,使用Foreman执行第 2 项。
  4. 注册 Airbrake 并检查错误。

(实际上,如果您执行了 3. 并且它仍然可以在您的本地计算机上运行,​​那么是时候联系 Heroku 支持了。)

最后的手段:二分搜索

让我们调用您当前的 repo project.git。制作此 repo 的副本,并将 master 分支重命名为future. 将最早的工作提交签出future到新存储库的主分支中,然后创建一个新的 Heroku 应用程序。推送和测试。

  1. 如果没有错误,向前跳到中点。
  2. 如果有错误,请向后跳。
  3. 推送和测试。重复。

继续这样做,直到找到引入错误的确切提交。这需要很长时间。git bisect可能有用。

于 2013-07-23T17:53:36.570 回答
1

在您的终端中,运行 heroku logs --tail 然后从其他终端运行 push 命令,看看发生了什么

于 2013-07-21T12:29:55.847 回答
0

如果 heroku 服务器上的 rails 控制台可以正常工作,那么 Rails 似乎可以正常启动了吗?

你真的在heroku上运行rails控制台没有错误,还是同样的错误?

您是否尝试过在本地生产模式下运行 rails 服务器?

rails server -e production

就个人而言,除了内部服务器错误之外,我不会在没有其他信息的情况下四处寻找,而是确保我已注册像 Airbrake [1] 或设置异常通知器 [2] 之类的错误服务

[1] https://addons.heroku.com/airbrake

[2] https://github.com/smartinez87/exception_notification

于 2013-07-23T11:51:04.417 回答