为什么捆绑器不会安装JSON gem?

时间:2014-01-13 15:31:20

标签: ruby-on-rails gem capistrano bundler

尝试运行cap production deploy时出现以下错误。

DEBUG [dc362284]    Bundler::GemNotFound: Could not find json-1.8.1.gem for installation
DEBUG [dc362284]    An error occurred while installing json (1.8.1), and Bundler cannot continue.
DEBUG [dc362284]    Make sure that `gem install json -v '1.8.1'` succeeds before bundling.

可能需要注意的是,此部署正在运行,而不是我升级到Ruby 2.1.0以删除编码错误。我本地升级,工作正常。我运行rvm install 2.1.0rvm use 2.1.0然后更改了我的.ruby-version文件以反映此Ruby升级。

bundle install命令在本地工作,但当我ssh到目标服务器并运行此命令时,会产生相同的上述错误。

如果我运行gem list,我可以在宝石列表中看到这一点。

...
jquery-rails (3.0.4)
json (1.8.1)
less (2.3.2)
...

如果我在本地尝试推荐的解决方案gem install json -v '1.8.1'并在目标服务器上获得以下输出:

Building native extensions.  This could take a while...
Successfully installed json-1.8.1
Parsing documentation for json-1.8.1
Done installing documentation for json after 0 seconds
1 gem installed

所以宝石出现了,对吗?为什么会这样?我怎么解决这个问题?任何帮助将不胜感激。

19 个答案:

答案 0 :(得分:67)

$ bundle update json
$ bundle install

答案 1 :(得分:67)

所以经过半天的讨论,几乎在发布问题后我立即找到了答案。 Bundler 1.5.0有一个错误,它无法将默认宝石识别为referenced here

解决方案是使用gem install bundler -v '= 1.5.1'

更新到bundler 1.5.1

答案 2 :(得分:48)

运行此命令,然后一切正常

sudo apt-get install libgmp-dev

答案 3 :(得分:40)

如果你在MacOS Sierra中,你的ruby版本是2.4.0。ruby版本与json 1.8.3不兼容。

您可以尝试在Gemfile中添加此行:

gem 'json', github: 'flori/json', branch: 'v1.8'

这对我有用!

答案 4 :(得分:25)

要解决此问题,只需运行:

bundle update

它将更新您的捆绑包的版本。然后运行:

bundle install

您的问题将得到解决。解决方案很好地解释了 here

答案 5 :(得分:20)

我找到了解决方案here。 json版本1.8.1和ruby 2.2.3存在问题,因此请安装json 1.8.3版本。

gem install json -v1.8.3

答案 6 :(得分:12)

你应该试试

$ sudo gem install json -v '1.8.2'

在我的情况下(Ubuntu 14.04)没有直接工作,我不得不这样做:

$ sudo apt-get install ruby-dev

然后我可以安装gem并继续。还有一个问题由以下原因解决:

$ sudo apt-get install libsqlite3-dev

希望有所帮助。

答案 7 :(得分:7)

我试图让一个项目在我的本地开发盒(OSX 10.6)上运行时遇到了这个错误,使用了Sinatra和Postgresql(通过activerecord),在rvm' d ruby​​ 2.1上运行。我在这里找到了答案:https://github.com/wayneeseguin/rvm/issues/2511

我的exact problem(在第一个日志条目块之后):

  

我在尝试为gems构建原生扩展时也遇到错误

answer

  

rvm重新安装2.1.0 --disable-binary

explanation

  

OSX没有包管理器,所以所有库都必须由用户手动安装,这使得几乎不可能动态链接二进制文件,正如您所看到的那样,(伪)静态链接二进制文件存在问题。 / p>

为了完整起见,我首先忘记更新rvm(rvm get head),这会产生一些其他错误,但在我这样做之后仍然需要--disable-binary标志。

答案 8 :(得分:7)

如果建议的答案没有帮助,因为您已经在使用较新版本的bundler。尝试适合我的解决方案。

删除供应商文件夹中的所有内容。 在gemfile中添加一行

gem 'json', '1.8.0'

然后运行 ​​- bundle update json

这似乎是1.8.1的一个问题,所以回到1.8.0对我来说是个窍门。

答案 9 :(得分:5)

bundle update json。帮助通过。

答案 10 :(得分:3)

对于OS X,请确保您拥有 coreutils

$ brew install coreutils
$ bundle

答案 11 :(得分:3)

当我尝试使用gem install json使用bundle install安装json gem而不仅仅使用ERROR: Failed to build gem native extension.时,我得到 apt-get install ruby-dev ,看起来我发现使用

{{1}}

做了这个伎俩

答案 12 :(得分:2)

Bundle无法安装json -v'1.8.1'并删除我的Gemfile.lock并再次运行bundle解决了这个问题。

答案 13 :(得分:2)

我缺少C头解决方案是为Xcode下载它,这是最好的方法。

xcode-select --install

希望它有所帮助。

答案 14 :(得分:2)

这似乎是Bundler中的一个错误,无法识别与ruby 2.x一起安装的默认gem。即使使用最新版本的bundler(1.5.3),我仍然遇到了问题。

一种解决方案是从默认的gemspec目录中删除json-1.8.1.gemspec。

rm ~/.rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/specifications/default/json-1.8.1.gemspec

执行此操作后,bundler应该没有问题找到gem。请注意,我正在使用chruby。如果您正在使用其他一些ruby管理器,则必须相应地更新路径。

答案 15 :(得分:1)

我安装了最新版本的json:

bundle install

然后从Gemfile.lock中删除了行json(1.8.1)并执行了

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <html>
            <head> </head>
            <body>
                <xsl:apply-templates select="//CP[@Checked = 'Y']/@Txt"/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="@Txt">
        <xsl:value-of select="."/>
        <br/>
    </xsl:template>

</xsl:stylesheet>

然后Gemfile.lock文件使用没有错误的json(1.8.3)

答案 16 :(得分:0)

Switch ruby version from 1.9 to 2.2 with rvm did the job for me

答案 17 :(得分:0)

对我来说,前面提到的一些答案从理解的角度来看是有帮助的,但那些并没有解决我的问题。

所以这就是我解决问题的方法。

  • 修改了gemfile.lock以更新json(2.0.2)(早期,它是1.8.3
  • 检查已安装的Bundler版本(Bundler -v命令)。我安装了1.12.5版本
  • 安装bundler 1.11.2版(使用gem install bundler -v '1.11.2'
  • 然后运行bundle install

答案 18 :(得分:0)

对于macOS Sierra:

当我在Rails(v1.15.3)项目中使用bundler(v4.2)时遇到了这个错误。 我的解决方案是gem uninstall bundler -v '1.15.3'gem install bundler -v '1.14.6'