我正在尝试使用执行资源更改gem源,但我需要这样做一次。
remove_rubygems = 'gem sources -r http://rubygems.org/'
execute 'change sources to our gem server' do
command "#{remove_rubygems} && gem sources -a http://mygemserver"
creates "~/.gemrc"
end
这一切都是因为当我多次执行此资源时, .gemrc文件看起来就像它。
vagrant@leibniz-app:~$ gem source
*** CURRENT SOURCES ***
http://mygemserver/
http://mygemserver/
http://mygemserver/
http://mygemserver/
...
然后,我想在.gemrc文件中使用mygemserver一次。
我该怎么做?
有没有办法在执行我的资源之前知道.gemrc的内容。?
答案 0 :(得分:2)
不要在路径中使用~/
;这就是creates
行无法阻止execute
资源在文件已存在时运行的原因。
execute 'change sources to our gem server' do
command "#{remove_rubygems} && gem sources -a http://mygemserver"
creates "/root/.gemrc"
end
或者,如果要检查文件是否包含特定行:
execute 'change sources to our gem server' do
command "#{remove_rubygems} && gem sources -a http://mygemserver"
not_if "grep -F -q -e http://mygemserver/ ~/.gemrc" # this uses a shell, so the
# tilde should work here.
end