# Installing gems with rake

**URL:** <https://www.ruby-forum.com/t/installing-gems-with-rake/65818>\
**Category:** Ruby\
**Created:** [August 21, 2006, 5:45pm UTC](https://www.ruby-forum.com/t/installing-gems-with-rake/65818 "2006-08-21T17:45:24Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![robkuz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/34f0e0/32.png) [@robkuz](https://www.ruby-forum.com/u/robkuz)\
**Post date:** [August 21, 2006, 5:45pm UTC](https://www.ruby-forum.com/t/installing-gems-with-rake/65818/1 "2006-08-21T17:45:24Z")

</div>

is that possible.  
google says nothing about it.

ciao robertj

---

<div class="post-metadata">

**Author:** ![robkuz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/34f0e0/32.png) [@robkuz](https://www.ruby-forum.com/u/robkuz)\
**Post date:** [August 22, 2006, 6:09am UTC](https://www.ruby-forum.com/t/installing-gems-with-rake/65818/2 "2006-08-22T06:09:03Z")

</div>

Robert K. wrote:

> is that possible.  
> google says nothing about it.
> 
> ciao robertj

Robert- I’m handling it with a new task and a yml config.

sudo rake gems:install

######## gems.rake ########

namespace :gems do  
require ‘rubygems’

task :install do  
# defaults to --no-rdoc --no-ri, set docs=(anything) to build docs  
docs = (ENV[‘docs’].nil? ? ‘–no-rdoc --no-ri’ : ‘’)  
#grab the list of gems/version to check  
gems = YAML.load\_file ‘config/gems.yml’

```
gems.each do |gem|
  # load the gem spec
  gem_spec = YAML.load(`gem spec #{gem[:name]}`)
  gem_loaded = false
  gem_loaded = require_gem gem[:name], gem[:version] rescue nil

  # if forced
  # or there is no gem_spec
  # or the spec version doesn't match the required version
  # or require_gem returns false
  # (return false also happens if the gem has already been 

```

loaded)  
if ! ENV[‘force’].nil? or  
! gem\_spec or  
(gem\_spec.version.version != gem[:version] and ! gem\_loaded)

```
    ret = system "gem install #{gem[:name]} -v #{gem[:version]} -y 

```

#{docs}"  
# something bad happened, pass on the message  
p $? unless ret  
else  
puts “#{gem[:name]} #{gem[:version]} already installed”  
end  
end  
end  
end

######## gems.yml ########

```
- :name: rails
  :version: "1.1.6"

- :name: fastercsv
  :version: "0.2.1"

- :name: memcache-client
  :version: "1.0.3"

- :name: mongrel
  :version: "0.3.13.3"

- :name: mongrel_cluster
  :version: "0.2.0"

- :name: uuidtools
  :version: "1.0.0"

- :name: ferret
  :version: "0.9.5"
```
