捆绑包更新mini_racer即使不应该也在更新rails?

时间:2019-01-06 19:30:47

标签: ruby-on-rails ruby command-line rubygems bundler

我遇到了与其他人相同的mini_racer更新问题,但是常见的建议对我没有用。

在我的gemfile中使用mini_racer 0.2.0运行bundle install时遇到以下错误...

2 warnings generated.
linking shared-object mini_racer_extension.bundle
clang: warning: libstdc++ is deprecated; move to libc++ [- 
Wdeprecated]
ld: library not found for -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see 
invocation)
make: *** [mini_racer_extension.bundle] Error 1

make failed, exit code 2

An error occurred while installing mini_racer (0.2.0), and Bundler
cannot continue.
Make sure that `gem install mini_racer -v '0.2.0' --source
'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
mini_racer

我正在尝试使用

更新mini_racer。

bundle update mini_racer

但是当我运行捆绑安装时,我遇到了一个新的(而且更令人震惊的)错误...

Bundler could not find compatible versions for gem "bundler":
In Gemfile:
rails (~> 5.1.4) was resolved to 5.1.6, which depends on
  bundler (>= 1.3.0)

render_async was resolved to 2.0.0, which depends on
  bundler (~> 1.8)

Current Bundler version:
bundler (2.0.1)
This Gemfile requires a different version of Bundler.
Perhaps you need to update Bundler by running `gem install bundler`?

Could not find gem 'bundler (~> 1.8)', which is required by gem 
'rails (~>
5.1.4)', in any of the sources.

我应该怎么做才能在不更新依赖项的情况下更新mini_racer? (至少我认为这是正在发生的事情)

2 个答案:

答案 0 :(得分:1)

您的第一个失败是由于缺少迷你赛车手的依赖性。该错误消息中的键是:

library not found for -lstdc++

您需要安装gcc。如果您使用的是Homebrew,则可以运行brew install gcc

rails被搞砸的原因是因为当您运行bundle update命令时,它似乎正在更新所有内容,包括依赖项。我相信有一个捆绑程序标志可以强制其仅更新您选择的宝石,但是由于您缺少小型赛车手所需的依赖关系,因此仍然无法为您提供帮助。

安装gcc后,只需运行bundle install。那应该安装迷你赛车没有错误。

如我所述,捆绑器错误是由于最近对捆绑器进行的更新所致。我暂时锁定在1.17.3,因为我没有运气解决该错误消息。

答案 1 :(得分:0)

找出解决方法。

问题是heroku不支持bundler 2.0及更高版本,并且如果我们更新mini_racer,它将更新bundler,因此为了使mini_racer和heroku开心,我们在gemfile中更新了mini_racer并指定了最新版本,并且那么我们总是使用

gem install bundler --version 1.16.4

直到heroku支持更新的捆绑程序版本。