gpt4 book ai didi

ruby-on-rails - Rails View 在 ruby​​ 1.9 中自发燃烧的ivars

转载 作者:数据小太阳 更新时间:2023-10-29 07:20:01 24 4
gpt4 key购买 nike

我有一个 Rails 3/ruby​​ 1.9.2 webapp。每隔一段时间 - 它可能只有 100000 个请求中的 1 个 - 我收到一个我无法解释的错误报告。

确切的错误各不相同,但它们似乎与我认为的实例变量突然变为零有关。最明显的例子是最近发生的,这个代码在一个帮助程序中 -

 @swf_object_count||=0
@swf_object_count+=1

- 引发“NoMethodError:未定义的方法‘+’为 nil:NilClass”。但是,请注意,错误不限于这种情况,这两行代码仅用于说明,而不是可以解决“解决”问题的方法。

该错误基本上无法重现:我自己从未见过,只看到由此产生的错误报告。我相信当我们从 REE 切换到 ruby​​ 1.9.2 时,这个错误首先出现。

可能相关也可能不相关的杂项细节:

  • 我们在 Solaris 10 上运行 ruby​​1.9.2p290,使用 unicorn 分支实例
  • 我们没有使用线程或纤程(更正:我们的应用程序本身没有,但我们确实使用了 NewRelic,它有一个用于收集/发布统计信息的后台线程。)
  • 我们有混合的 .haml 和 .erb View ,但我只在 .haml 中看到过这种情况。 (虽然我们没有很多 .erb)
  • 我从未在 Controller 代码中看到过这种情况
  • 我偶尔会看到有关“Bar 的未定义方法‘foomethod’”的错误,而我确实知道我们从不调用 Bar.foomethod。这可能与上述错误有关,其中 Bar 对象自发地替换了 Foo ivar。

我很难找到它。有什么建议,或者有人见过听起来相似的东西吗?

最佳答案

我的第一个想法是线程或纤维——但你说你不使用它们。嗯...这可能是从过时的 session 中触发的吗?

这确实是一个非常广泛且定义松散的问题..

也许您可以编写一个脚本来分析您的日志文件,并尝试缩小发生这种情况的时间/路径。但这也很难调试,因为您可能在此过程中进行了一些代码更改,其中一些已经产生了看起来相似的有效错误。

Unicorn 实例可能会死掉然后重新启动。这可能会打乱当前 session 。这可能是您想要试验的东西——例如使用具有两个 unicorn 的测试环境,在 session 中期终止一个,看看这对您的日志有何影响。

您可能应该安装一个工具,让您的 Rails 服务器在触发异常时通过电子邮件向您发送详细的日志记录。这可能是更好地了解那里发生的事情的最佳方式。

例如:您的 Gemfile 中的这个 Gem:

# Receive exception notifications from production
gem 'exception_notification_rails3', :require => 'exception_notifier'

在你的 config/environments/production.rb 文件中:

  config.middleware.use ExceptionNotifier,
:email_prefix => "[Exception] ",
:sender_address => %{"Exception Notifier" <your-system@your-domain.com>},
:exception_recipients => %w{person1@your-domain.com person2@your-domain.com}

另见: https://github.com/railsware/exception_notification

关于ruby-on-rails - Rails View 在 ruby​​ 1.9 中自发燃烧的ivars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com