MultiJson AdapterError Rails 4 Ruby 2 乘客

Posted

技术标签:

【中文标题】MultiJson AdapterError Rails 4 Ruby 2 乘客【英文标题】:MultiJson AdapterError Rails 4 Ruby 2 Passenger 【发布时间】:2014-05-21 21:58:30 【问题描述】:

我正在尝试在 aws 上设置 rails(开发环境工作正常)。无法正确启动生产。 Can shell in 和 db 看起来不错。我查看了我的日志文件,我收到以下错误。

rake aborted!
MultiJson::AdapterError: Did not recognize your adapter specification (cannot load such file -- json/ext/parser).

在 gemlock 文件中安装了 MultiJsonJson gems。

这发生在资产编译期间。

【问题讨论】:

【参考方案1】:

我今天也遇到了类似的问题。这是我的一些日志:

Started POST "/users/sign_in" for 173.228.60.113 at 2015-09-29 15:53:47 +0000

MultiJson::AdapterError (Did not recognize your adapter specification (cannot load such file -- json/ext/parser).):
  activesupport (3.2.3) lib/active_support/dependencies.rb:251:in `require'
  activesupport (3.2.3) lib/active_support/dependencies.rb:251:in `block in require'
  activesupport (3.2.3) lib/active_support/dependencies.rb:236:in `load_dependency'
  activesupport (3.2.3) lib/active_support/dependencies.rb:251:in `require'
  json (1.8.3) lib/json/ext.rb:13:in `'
  json (1.8.3) lib/json/ext.rb:12:in `'
  json (1.8.3) lib/json/ext.rb:9:in `'

bundle show(在 ec2 实例上)显示 json gem 的安装位置:

[ec2-user@ip-172-31-43-145 current]$ bundle show json
/usr/local/share/gems1.9/gems/json-1.8.3

在那个目录下面有一个文件ext/json/ext/parser/parser.so

这是一个原生扩展。我之前多次遇到过这些安装不正确的问题。我的解决方法是在lib/json/ext 中安装符号链接

命令如下所示:

ln -s ../../../ext/json/ext/parser/parser.so .

来自上述目录。

我还为 generator.so 添加了一个符号链接。连接到lib/json/ext 时执行的命令是:

ln -s ../../../ext/json/ext/generator/generator.so .

ext/json下还有一个目录叫fbuffer,但它只有一个.h文件,没有.so。

这解决了问题。我知道去哪里看,因为错误消息总是告诉您相对于核心 gem .rb 文件的路径,在本例中为 ext/json/json.rb

对于每次更新带有本机扩展的 gem 时都必须手动执行此操作,我一点也不高兴。如果有人能告诉我如何不必这样做,我会非常喜欢。但与此同时,这将解决它。

【讨论】:

【参考方案2】:

在处理了无法还原版本的情况后,我找到了另一个解决问题的方法。

我们只是缺少适当的依赖 gem。这对我来说可以在不降级的情况下修复它:

gem install json

希望这也能帮助其他人解决这个问题。我是从 Google 来到这里的,所以希望其他人也会。

【讨论】:

我看到原始海报已经安装了 json gem ......我的错。 :( 但这确实为我解决了这个问题......【参考方案3】:

我不是 100% 确定问题出在哪里,但我在某处读到将 multi_json gem 降级到 1.7.8 版可以解决这个问题,它对我有用。请注意,这只是修复了我的应用程序的原因,对您来说可能不一样,但希望是这样!我做了以下事情:

将以下内容添加到您的 Gemfile:

gem 'multi_json', '1.7.8' 

然后更新gem:

bundle update multi_json

提交新的更改:

git add .
git commit -m "Downgrade multi_json gem"

然后推送到 AWS:

git aws.push

这应该可以解决问题。


如果您收到捆绑程序关于不匹配依赖项的投诉,您可以重新安装您的 gem,并希望通过删除 Gemfile.lock 来解决依赖项问题。

删除 Gemfile.lock 运行:

rm Gemfile.lock

然后运行捆绑安装:

bundle install

再次提交并推送到 aws。

【讨论】:

只是好奇,你为什么要启动 Gemfile.lock?捆绑更新会覆盖它。在某些情况下您的方法更安全吗? 你是对的,bundle update multi_json 会更安全,更好的解决方案。我写删除 Gemfile.lock 的原因是因为这解决了我的问题,而 bundle update 没有。我更改了答案以指示人们先运行bundle update。谢谢!

以上是关于MultiJson AdapterError Rails 4 Ruby 2 乘客的主要内容,如果未能解决你的问题,请参考以下文章

latex 中 \ra 是啥意思 ?

如何在 Xcode 中播放 RealAudio (.RA) 文件(远程或本地)?

1084

RA-SaaS项目已延迟,并将继续延迟...

Service Fabric:System.IndexOutOfRangeException -“System.RA”报告属性“ReplicaOpenStatus”的警告

如何使绘制的图像居中?