我有一个使用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
答案 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_GEMS
到true
用于捆绑宝石以便在本地妥善存储。
答案 2 :(得分:0)
我在.bashrc文件中定义了BUNDLE_GEMFILE = /home/app/current/Gemfile
。在将新版本部署到服务器时,这破坏了捆绑执行。请与env
一起检查您的环境变量中没有定义BUNDLE_GEMFILE
。
我将BUNDLE_GEMFILE
添加到.bashrc文件中以简化monit命令。现在我只是在monit命令的开头定义变量。