【问题标题】:MultiJson AdapterError Rails 4 Ruby 2 PassengerMultiJson AdapterError Rails 4 Ruby 2 乘客
【发布时间】: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。

这发生在资产编译期间。

【问题讨论】:

    标签: ruby-on-rails amazon-web-services amazon-elastic-beanstalk


    【解决方案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。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      相关资源
      最近更新 更多