【发布时间】:2019-10-22 06:48:12
【问题描述】:
我的食谱中有两节:
Chef::Config[:rubygems_url]='http://localbox/gems' #ghetto-for-ghetto
[
# :
%w(thor <0.20.3) ,
# :
].each do |g,v|
gem_package g do
version v if v
# action :remove
action :purge # Mjolnir
end
end
和
[
# :
%w(thor =0.20.3) ,
# :
].each do |g,v|
gem_package g do
version v if v
end
end
我的调用似乎不错,但随后保释:
:
* gem_package[thor] action purge (up to date)
:
:
* gem_package[thor] action install
================================================================================
Error executing action `install` on resource 'gem_package[thor]'
================================================================================
Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of /usr/bin/gem install thor -q --no-rdoc --no-ri -v "=0.20.3" --clear-sources --source=https://www.rubygems.org --no-user-install --no-ri --no-rdoc ----
STDOUT:
STDERR: ERROR: While executing gem ... (Errno::EEXIST)
File exists - (/usr/local/bin/thor)
---- End output of /usr/bin/gem install thor -q --no-rdoc --no-ri -v "=0.20.3" --clear-sources --source=https://www.rubygems.org --no-user-install --no-ri --no-rdoc ----
Ran /usr/bin/gem install thor -q --no-rdoc --no-ri -v "=0.20.3" --clear-sources --source=https://www.rubygems.org --no-user-install --no-ri --no-rdoc returned 1
Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/fake/recipes/default.rb
121: gem_package g do
122: version v if v
123: options '--no-user-install --no-ri --no-rdoc'
124: clear_sources true
125: # gem_binary '/usr/bin/gem'
126: end
127: end
Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/fake/recipes/default.rb:121:in `block in from_file'
gem_package("thor") do
package_name "thor"
action [:install]
default_guard_interpreter :default
declared_type :gem_package
cookbook_name "fake"
recipe_name "default"
version "=0.20.3"
options "--no-user-install --no-ri --no-rdoc"
clear_sources true
gem_binary "/usr/bin/gem"
end
:
而且,为了好玩,这是让厨师查找的初步尝试:
# more /root/.gemrc
---
gem: --no-rdoc --no-ri
:verbose: false
:update_sources: true
install: --no-wrappers --no-user-install --conservative --minimal-deps
update: --no-wrappers --no-user-install --conservative --minimal-deps
:disable_default_gem_server: true
:sources:
- http://localbox/gems/
问题:
一个定制的rubygems 源需要多长时间才能粘住?需要明确的是,我们是一个适度安全的环境,很少/没有主机可以自己联系外界。
什么时候净化的宝石仍然是宝石?我订购清洗时是否口吃?
# gem list --local thor
*** LOCAL GEMS ***
thor (0.19.1)
如果 gems 可以与多个版本共存,有什么想法为什么这个不能?
这种依赖地狱在 ruby 中不应该是罕见的吗?
真的,不过,我的目标是升级宝石,这实际上是不可能的,所以我的 B 计划是在必要时用愤怒的上帝之力重创旧版本。谁能看到我的计划在哪里失败了?
【问题讨论】:
标签: rubygems chef-infra