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

时间:2015-01-27 20:41:00

标签: ruby gem bundler

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

我有一个非常简单的Gemfile

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

和bundler config:

[$]> 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

在使用一个子命令时,我对Bundler如何认为安装宝石感到有点失落,但认为在使用另一个子命令时它们会丢失。

[$]> 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

3 个答案:

答案 0 :(得分:5)

删除env目录并重新安装后,我注意到它创建了两个Ruby版本的子目录 - 2.1.0和2.2.0。后者是我当前的Ruby版本,但目录是空的(所有宝石都安装在env/ruby/2.1.0/gems目录中)。这与Oliver关于rbenv的回答相结合,让我想到了不匹配的版本。

我重新安装了一个简单gem install bundler的捆绑包,重新bundle install,一切都很好。

一般来说,答案是解决与您实际使用的不同版本的Ruby相关的Bundler安装问题。对我来说这似乎很奇怪,bundle install会使用一个东西而bundle exec会使用另一个东西,但*耸肩*无论如何。

答案 1 :(得分:1)

我必须打开./.bundle/config并设置 BUNDLE_DISABLE_SHARED_GEMStrue用于捆绑宝石以便在本地妥善存储。

答案 2 :(得分:0)

我在.bashrc文件中定义了BUNDLE_GEMFILE = /home/app/current/Gemfile。在将新版本部署到服务器时,这破坏了捆绑执行。请与env一起检查您的环境变量中没有定义BUNDLE_GEMFILE

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