2013-07-20 114 views
4

我有以下几点:木偶 - 控制安装包版本

class compass { 
    package { 'ruby-dev': 
     ensure => installed, 
    } 
    package { ["rubygems"]: 
     ensure => 'installed' 
    } 

    package { ['sass']: 
     ensure => '3.2.0.alpha.277', 
     provider => 'gem', 
     require => Package['rubygems'] 
    }~> 
    package { ['compass']: 
     ensure => '0.12.2', 
     provider => 'gem', 
     require => Package['rubygems'] 
    } 
} 

当我做gem list它运行后,中sass两个版本已安装:

# gem list 

*** LOCAL GEMS *** 

chunky_png (1.2.8) 
compass (0.12.2) 
ffi (1.9.0) 
fssm (0.2.10) 
listen (1.1.6) 
rake (10.1.0) 
rb-fsevent (0.9.3) 
rb-inotify (0.9.0) 
rb-kqueue (0.2.0) 
sass (3.3.0.alpha.212, 3.2.0.alpha.277) 
zurb-foundation (3.0.6) 

为了让我的代码要运行,只应安装3.2.0.alpha.277。看起来sass包的要求已经满足,但是compass包需要sass“〜> 3.1”。

我如何确保只安装了3.2.0.alpha.277版本的sass?

回答

4

有趣的是,我在Ubuntu 12.04的一个非常干净的版本上运行了它,它只安装了277版本。

另外我不认为包资源可以为你做这个。你可以在一个exec处理它虽然,如:

exec { 'remove-sass-3.3.0.alpha.212': 
    command => 'gem uninstall sass -v=3.3.0.alpha.212', 
    unless => 'test `gem list --local | grep -q 3.3.0.alpha.212; echo $?` -ne 0', 
    path => ['/usr/bin', '/bin'], 
} 

你甚至可以把它包起来作为一个定义的类型:

define remove-gem ($version) { 
    exec { "remove-gem-${name}-version-${version}": 
    command => "gem uninstall ${name} -v=${version}", 
    unless => "test `gem list --local | grep -q \"${name}.*${version}\"; echo $?` -ne 0", 
    path => ['/usr/bin', '/bin'], 
    } 
} 


remove-gem {'sass': 
    version => '3.3.0.alpha.212', 
} 

这样你可以重复使用它删除其他特殊宝石版本。

+0

再次感谢。这像一个魅力。 – phidah