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 文件中安装了 MultiJson
和 Json
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 乘客的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 中播放 RealAudio (.RA) 文件(远程或本地)?
Service Fabric:System.IndexOutOfRangeException -“System.RA”报告属性“ReplicaOpenStatus”的警告