Estou trabalhando em um script Ansible para instalar meu ambiente de trabalho padrão (Ruby on Rails).
O Ansible é executado sob o sudo, e as gemas que foram instaladas só são acessíveis sob o sudo também. Se eu faço gem env
como usuário normal, recebo isto:
$ 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
Quando abro o arquivo em questão, vejo o seguinte:
#/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
A linha 10 é a linha require 'rubygems/defaults'
.
Fazer sudo gem env
mostra o seguinte:
$ 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/
Alguém pode me dizer o que eu preciso fazer para tornar as gemas acessíveis ao meu usuário normal no modo não-sudo?
EDIT: Um pouco mais de informação. Eu procurei por onde ele deveria estar carregando rubygems/defaults
, usando 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
Supondo que deveria estar carregando /usr/local/lib/ruby/gems/1.8/gems/rubygems-update-1.2.0/lib/rubygems/defaults.rb
, alterei a linha de solicitação para ter o caminho completo para isso:
require '/usr/local/lib/ruby/gems/1.8/gems/rubygems-update-1.2.0/lib/rubygems/defaults'
e isso pareceu funcionar - então ele falhou na linha require 'thread'
, a qual eu presumivelmente poderia fazer a mesma coisa.
Então, parece que o Ruby precisa saber para qual pasta iniciar, quando procurar coisas para incluir. Talvez seja isso que eu precise fazer? Eu não sei a melhor maneira de fazer isso ...