ansible을 사용하여 Ruby 및 gem을 설치한 후 gem에 액세스할 수 없습니다.

ansible을 사용하여 Ruby 및 gem을 설치한 후 gem에 액세스할 수 없습니다.

표준 작업 환경(Ruby on Rails)을 설치하기 위해 Ansible 스크립트를 작성 중입니다.

Ansible은 sudo에서 실행되며 설치된 gem은 sudo에서만 액세스할 수 있습니다. gem env일반 사용자로 이 작업을 수행 하면 다음과 같은 결과가 나타납니다.

$ gem env
/usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:10:in `require': no such file to load -- rubygems/defaults (LoadError)
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:10
    from /usr/local/bin/gem:8:in `require'
    from /usr/local/bin/gem:8

문제의 파일을 열면 다음을 볼 수 있습니다.

#/usr/local/lib/ruby/site_ruby/1.8/rubygems.rb

# -*- ruby -*-
#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++

gem_disabled = !defined? Gem

require 'rubygems/defaults'
require 'rbconfig'
require 'thread' # HACK: remove me for 1.5 - this is here just for rails

라인 10 입니다 require 'rubygems/defaults'.

이렇게 하면 sudo gem env다음이 표시됩니다.

$ sudo gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.4.2
  - RUBY VERSION: 1.8.6 (2010-09-02 patchlevel 420) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/1.8
     - /home/max/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--no-document --no-ri --no-rdoc"
  - REMOTE SOURCES:
     - http://rubygems.org/

Sudo가 아닌 모드에서 일반 사용자가 gem에 액세스할 수 있도록 하려면 어떻게 해야 하는지 알려줄 수 있는 사람이 있나요?

편집: 추가 정보. rubygems/defaults다음을 사용하여 로드해야 하는 위치를 찾았 습니다 locate.

$ locate rubygems | grep default
/usr/lib/ruby/1.9.1/rubygems/defaults.rb
/usr/local/lib/ruby/gems/1.8/gems/rubygems-update-1.2.0/lib/rubygems/defaults.rb
/usr/local/src/rubygems-1.4.2/lib/rubygems/defaults.rb

로드 중이어야 한다고 생각하여 /usr/local/lib/ruby/gems/1.8/gems/rubygems-update-1.2.0/lib/rubygems/defaults.rb전체 경로를 가져오도록 require 줄을 변경했습니다.

require '/usr/local/lib/ruby/gems/1.8/gems/rubygems-update-1.2.0/lib/rubygems/defaults'

이것은 작동하는 것 같았습니다. 그러다가 라인에서 실패했고 require 'thread'아마도 동일한 작업을 수행할 수 있을 것입니다.

따라서 포함할 콘텐츠를 찾을 때 Ruby에서 시작할 폴더를 알려줘야 하는 것 같습니다. 어쩌면 이것이 내가해야 할 일일까요? 하지만 최선의 방법은 모르겠습니다...

관련 정보