'bundle exec' 抱怨 gem 没有被安装,即使在 'bundle install' 之后

'bundle exec' complains about gem not being installed, even after 'bundle install'

我有一个网站使用 Jekyll with Github Pages。之前在另一台计算机上弄乱了版本和 RVM 之后,在这台计算机上我选择只使用一个版本的 Ruby 和使用捆绑器的每个项目环境。

我有一个很简单的 Gemfile:

[$]> cat Gemfile
source 'https://rubygems.org'
gem 'github-pages'

和捆绑器配置:

[$]> cat .bundle/config
---
BUNDLE_PATH: env
BUNDLE_DISABLE_SHARED_GEMS: '1'

当我通过 bundle exec 运行 任何命令(jekyll、gem、irb)时,我得到一个依赖错误:

[$]> bundle exec jekyll
Could not find RedCloth-4.2.9 in any of the sources
Run `bundle install` to install missing gems.

但是,捆绑包已经安装:

[$]> bundle install
Using RedCloth 4.2.9
Using i18n 0.6.11
Using json 1.8.1
[snip]
Using github-pages 29
Using bundler 1.7.7
Your bundle is complete!
It was installed into ./env

对于捆绑器如何在使用一个子命令时认为 gem 已安装,但在使用另一个子命令时却认为它们丢失了,我有点不知所措。

[$]> which ruby
/usr/local/bin/ruby
[$]> which bundler
/usr/local/bin/bundler
[$]> ruby --version
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
[$]> bundler --version
Bundler version 1.7.7

安装 rbenv 后,我遇到了与我的 Ruby 经理完全相同的问题。最后我解决了这个问题:

rbenv rehash

(另外,根据@joel-glovier 的评论,您可能需要重新启动终端)

它抱怨 Redcloth 4.2.9 的事实实际上是在转移注意力。 Bundler 可能找不到任何宝石,但 Redcloth 是它寻找的第一个宝石,因此它立即退出并出现该错误。

基本上我已经安装了 rbenv 和 ruby 2.2.2 并使用 rbenv global 2.2.2 更改为该版本,但我忘记了 运行 rbenv rehash。所以我猜当 运行ning bundle install 它正在查看我以前使用的 ruby 版本(系统 ruby)以查看安装了哪些宝石但是当 运行ning bundle exec jekyll serve 它正在查看我的新 ruby 版本,但没有找到任何精华。

删除 env 目录并重新安装后,我注意到它为两个 Ruby 版本(2.1.0 和 2.2.0)创建了子目录。后者是我当前的 Ruby 版本,但是目录是空的(所有的 gem 都安装到 env/ruby/2.1.0/gems 目录中)。这一点,再加上 Oliver 关于 rbenv 的回答,让我想到了不匹配的版本。

我用一个简单的 gem install bundler 重新安装了 bundler,重新运行 bundle install,一切都很好。

总的来说,答案似乎是解决与您实际使用的 Ruby 不同版本的捆绑程序安装问题。这对我来说似乎很奇怪,它会为 bundle install 使用一种东西,而为 bundle exec 使用另一种东西,但是 *耸耸肩* 不管怎样。

我在 .bashrc 文件中定义了 BUNDLE_GEMFILE = /home/app/current/Gemfile。这在将新版本部署到服务器时破坏了 bundle exec。检查 env 您没有在环境变量中定义 BUNDLE_GEMFILE

我将 BUNDLE_GEMFILE 添加到 .bashrc 文件中以简化 monit 命令。现在我只是在 monit 命令的开头定义变量。

我必须打开 ./.bundle/config 并设置 BUNDLE_DISABLE_SHARED_GEMStrue 用于捆绑要在本地正确存储的宝石。