我的食谱中有两个节:
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/
问题:
在自定义红宝石源粘贴之前,必须用多大的锤子锤击?需要明确的是,我们是一个中等安全的环境,很少/没有主机可以自己与外界联系。
什么时候净化的宝石仍然是宝石?我命令清洗时口吃了吗?
# gem list --local thor
*** LOCAL GEMS ***
thor (0.19.1)
如果宝石可以与多个版本共存,那么为什么这个版本不能?
这种依赖地狱在红宝石中难道不罕见吗?
确实,我的目标是升级宝石,实际上是不可能的,因此我的计划B是在必要时用愤怒的神的力量击打旧版本。谁能看到我的计划破裂了?
答案 0 :(得分:0)
感觉就像您缺少先决条件库(依赖项)。我建议您手动尝试安装rubygem,然后,一旦知道如何安装,就可以利用Chef。
捆绑红宝石的最佳方法可能是使用bundler来管理Gemfile。在您的情况下,Gemfile应该看起来像...
bundle_install '/path/to/Gemfile' do
deployment true
jobs 3
end
这应该可以管理所需的红宝石。
当然,您可以使用poise-ruby
食谱再次利用Chef来为您运行捆绑器:
npm install --save grpc