【问题标题】:Rails ActiveSupport::JSON causes Illegal Instruction errorRails ActiveSupport::JSON 导致非法指令错误
【发布时间】:2011-05-02 19:28:23
【问题描述】:

我正在尝试将我的 rails 项目中的某些内容编码为 JSON,但似乎对 Rails 中任何 JSON API 的任何调用都会导致 WEBrick 引发 "Illegal Instruction" 错误。

我的代码是:

@nodes = Node.all
j = ActiveSupport::JSON
@json = j.encode(@nodes)

我不明白为什么会出现此错误。有人可以帮忙吗?

不确定这是否相关,但我也在使用mysql2spatial 适配器,因为我的Node 类包含一个类型为GEOMETRY 的字段(mysql 空间扩展)。

谢谢!

【问题讨论】:

  • 你有堆栈跟踪吗?是否有任何迹象表明它在引发错误之前所做的最后一件事?
  • 而 Node 是一个 ActiveRecord 对象?然后就可以使用 Node.all.to_json 了。
  • Node 是模型类。 @nodes 是数据库中所有节点的数组。真的没有任何堆栈跟踪。 Rails 简单地崩溃(WEBbrick 确实如此)并且只是给了我一个明确的“非法指令”错误。非常令人沮丧,因为我什至无法追踪它。任何帮助将不胜感激!谢谢!

标签: mysql ruby-on-rails ruby json activesupport


【解决方案1】:

JSON gem 需要已编译的扩展,因此您的版本可能未针对您当前使用的架构或操作系统进行编译。您可能需要重新安装它,看看是否能解决问题。

Ruby 本身很少抛出异常,但编译后的扩展会更频繁地抛出异常,尤其是针对一组不同的系统库编译时。

【讨论】:

  • 嗨,tadman,我认为这是错误,但是当我尝试使用不同的数据集(非空间数据)做完全相同的事情时,它工作正常。我不明白为什么空间数据会导致错误。渲染 xml 工作得非常好,它甚至在 xml 中显示“Point(lat,lon)”,表明适配器正在工作。任何帮助将不胜感激。谢谢!
  • XML 渲染是通过与 JSON 不同的模块完成的,所以它可能是一个糟糕的 JSON gem 安装,就像我建议的那样。您可以尝试使用不同的 JSON 库或不同的 Ruby,例如通过 rvm。如果您有一个表现出这种行为的单元测试,那么通过消除过程进一步缩小范围并不难。
  • 嗨,tadman,感谢您的回复。我对使用 rvm 安装导轨感到非常困惑。我的机器上安装了 1.9.2-p180,但那是通过从源代码编译的。如何重新安装 JSON gem 并重试?这个错误非常令人沮丧。非常感谢您迄今为止的帮助!
  • 通常的程序是在您的Gemfile 中声明gem 'json',并让bundle install 负责其余的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2014-01-25
相关资源
最近更新 更多