обновление rubygem (например: thor) в шеф-поваре - PullRequest
0 голосов
/ 06 июня 2019

В моем рецепте есть две строфы:

    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/

Вопросы:

  1. Как трудно перед тем, как забить собственный источник рубиновэто торчит?Чтобы быть ясным, мы скромно безопасная среда, и немногие / никакие хосты не могут самостоятельно связаться с Внешними.

  2. , когда очищенный драгоценный камень все еще драгоценный камень?Я заикался, когда заказал чистку?

    # gem list --local thor

    *** LOCAL GEMS ***

    thor (0.19.1)

если гемы могут сосуществовать с несколькими версиями, есть какие-нибудь идеи, почему этот не может?

разве ад такого рода зависимости не должен быть редкостью с рубином?

на самом деле, однако, моя цель - обновить драгоценный камень, что на самом деле невозможно, поэтому мой план Б - поразить старую версию силой разъяренного бога, если нужнобыть.Кто-нибудь может увидеть, где рушится мой план?

1 Ответ

0 голосов
/ 06 июня 2019

Такое ощущение, что вам не хватает обязательных библиотек (зависимостей). Я рекомендую вам вручную попробовать установить rubygem, а затем, когда вы знаете, как это сделать, использовать шеф-повар.

Наилучшим способом связывания рубинов, вероятно, является использование bundler для управления Gemfile . В вашем случае Gemfile должен выглядеть примерно так ...

$ cat Gemfile 
# frozen_string_literal: true

source "http://localbox/gems"

gem "thor", "0.20.3"

Это должно регулировать ваши необходимые рубины.

Конечно, вы можете снова использовать шеф-повар для запуска упаковщика для вас, используя poise-ruby поваренная книга:

bundle_install '/path/to/Gemfile' do
  deployment true
  jobs 3
end
...