【问题标题】:Ruby Interpreter crashes with a certain wordRuby解释器因某个单词而崩溃
【发布时间】:2009-11-24 18:58:53
【问题描述】:

好吧,这个有点可笑,我怕没有人会相信我。但它是这样的:

我编写了一个 Ruby Rails 应用程序来处理大量域的内容。现在我知道这违反了 Rails 的基本规则,但是每个域的所有信息都保存在一个配置文件中。我知道这可能是错误的,但它现在就是这样设置的,而且不会太快(尽管会)。无论如何,您要查看的域的名称作为参数传入(至少在开发中)。该参数用于打开同名的配置文件。这意味着如果我想查看域 xxx 的内容,我需要输入(激活 Mongrel 服务器)http://localhost:3000?name=xxx。 Rails 将引用 xxx.xml,并提取必要的信息。

到目前为止,这对所有域都有效。生成配置文件并相应地更改它们很容易。除了,现在有一个域,当我尝试查看它时,Ruby 解释器会崩溃。经过测试,唯一引起问题的是实际域名,即 pumarunningshoes.com。当我把 puma 改成 luma 时,效果很好。当我把它改回来时,一切又崩溃了。因此,我必须得出结论,Rails 或 Mongrel 讨厌“puma”这个词。为什么是这样?是保留字,还是我不知道的函数?

感谢您的帮助!

【问题讨论】:

  • 哇,Rails 或 Mongrrel 可能更喜欢 Nike 或 Reeboks?
  • 澄清一下,您是否也将文件更改为“lumarunningshoes.xml”,或者只是更改了名称中的字符?我的意思是,你能用“luma”让网站 100% 正常运行吗?
  • 你得到任何类型的堆栈跟踪吗?
  • 不,没有堆栈跟踪。弹出一个对话框,说 ruby​​ 解释器已停止。我目前仍在尝试。我发现它在我的控制器中退出的位置,但这并不意味着什么,因为它适用于该应用程序使用的所有其他域。
  • 是的,这很奇怪。我更改了文件名,它工作。我改回文件名,但失败了。

标签: ruby-on-rails crash interpreter mongrel


【解决方案1】:

好的,我修好了。我不想承认这一点,因为这很尴尬。但是,本着专注于学习的 SO 精神,我将描述我的解决方案。

基本上,我逐行浏览了为此域调用的控制器方法。我发现我的一种方法对其他所有领域都有效,但在这个方法上却以某种方式失败了。当我删除方法调用和相关的视图内容时,它突然起作用了。

我做了一个假设,如果它适用于所有其他域,那么它也适用于这个域。我没有为此做任何不同的事情。所以现在我必须弄清楚为什么该方法在这个上失败了。但至少我得到了它的工作。

感谢您的所有帮助。谢谢你,SO 社区!

【讨论】:

    【解决方案2】:

    实际上,您应该能够将 GDB 附加到正在运行的 mongrel 进程并非常容易地模拟崩溃(因为您已经知道当域设置为特定字符串“x”时会发生这种情况)。

    欲了解更多信息,请参阅Gdb wrapper for ruby

    一旦你找到它崩溃(或段错误)的地方,要么用你在 gdb 中获得的回溯更新这个线程,要么将回溯发送到 ruby​​-core。

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      相关资源
      最近更新 更多