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で起動するフォルダを教えてください。たぶんこれが私がすべきことでしょうか?しかし、最善の方法はわかりません...

ベストアンサー1

おすすめ記事