[Resolvido] - Problemas com o comando 'gem' para instalar o Rails através de rede com Proxy

Olá pessoal, sou novo em Ruby e estava seguindo a apostila da Caelum rr71. Estou usando Ubuntu 12.04. Estava seguindo o Apêndice C da instalação quando parei no comando ‘sudo gem update --system’.

Quando executo pela linha de comando acontece o seguinte:

ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    bad response Proxy Authentication Required 407 (http://rubygems.org/latest_specs.4.8.gz)

Obs.: Estou na rede da minha empresa que utiliza proxy com autenticação. Coloquei a seguinte linha no .bashrc:

export http_proxy=http://usuario:senha@ip_proxy:porta

Mesmo assim o problema continua. Alguma dica?

Adicionei também em /etc/environment mais ainda assim o problema continua.

Alguém tem alguma idéia?

Tentei até com o argumento proxy, mas não deu certo:

sudo gem update --system --verbose --http-proxy=http://<usuario>:<senha>@<ip_proxy>:<porta>
GET http://rubygems.org/latest_specs.4.8.gz
407 Proxy Authentication Required
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    bad response Proxy Authentication Required 407 (http://rubygems.org/latest_specs.4.8.gz)

Estou sem idéias. Alguém já passou por isso?

Alguém???

O ruby não tem uma forma alternativa além do comando gem para atualizar o sistema e baixar o rails?

Não achei outra alternativa para instalar o rails a não ser baixar todas as dependências do mesmo e instalando uma a uma conforme necessário através do comando:

sudo gem install nome_da_gem.gem

Baixei os gems aqui:

http://rubygems.org/

Esse post me ajudou muito:

http://rubyonbr.org/forums/1/topics/661

Quem descobrir como utilizar o gem autenticando usuário e senha através de um proxy por favor post aqui. Estou muito interessado :slight_smile:

Tudo bem @jamesfrj?
Chegou a dar uma olhadinha por aqui? http://docs.rubygems.org/read/chapter/13#page51

Tudo Blz, ricardo.valeriano! Obrigado pela resposta. Li sobre o link que você me mandou e tentei aplicar no meu caso mas não deu certo.
Tentei com o comando:

sudo gem update --system --verbose --http-proxy=http://<usuario>:<senha>@<ip_proxy>:<porta> 

Mas sempre a mesma mensagem de erro.

407 Proxy Authentication Required  
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)  
    bad response Proxy Authentication Required 407 (http://rubygems.org/latest_specs.4.8.gz) 

Comandos linux como apt-get install funcionam bem com o proxy que estou usando. Agora não sei se o Ruby aceita inserir o usuário e senha junto ao colocar o proxy, por que tenho que me autenticar para acessar a net. Como o exemplo abaixo:

http://jamesfrj:minhasenha@10.0.0.1:8080

Beleza @jamesfrj?

Cara, eu nunca passei por esse problema da forma como você está descrevendo. A princípio apenas setar a variável de ambiente como você fez em seu .bashrc deveria ser o suficiente.

Tem uma galera lá no stackoverflow que parece que sim. A resposta que ganhou trocentos votos lá diz para setar a variável de ambiente HTTP_PROXY, ao invés de usar o switch na linha de comando. Para o rubygems, pela documentação, tanto faz a variável de ambiente HTTP_PROXY ou http_proxy.

Dá uma olhadinha na discussão, de repente ajuda: http://stackoverflow.com/questions/4418/how-do-i-update-ruby-gems-from-behind-a-proxy-isa-ntlm. Infelizmente não sei o que pode ser =/

Fala, ricardo.valeriano! Obrigado pela sua dica. Fui no stack overflow nesse link que você me mandou e consegui resolver instalando o cNTLM, que cria um proxy virtual localmente no meu computador e automaticamente adiciona o protocolo NTLM às conexões padrões do Ubuntu, feitas para ‘proxies normais’ (http://zipizap.wordpress.com/tag/cntlm/)
Nota #1: não instalei conforme o passo a passo desta página (http://zipizap.wordpress.com/tag/cntlm/), mas usando o apt-get assim:

sudo apt-get install cntlm 

Configurei o Cntlm para usar o proxy NTLM, (no meu caso) editando o /etc/cntlm.conf

Dentro do arquivo /etc/cntlm.conf alterei as linhas:

Username        theNLTM-ProxyUsername
Domain          yourdomain.com
Password        theNTLM-ProxyPassword

A seguir é preciso reiniciar o Cntlm para as configurações terem efeito

Para usar o comando gem então agora é só adicionar a cláusula --http-proxy http://localhost:3128 (do proxy do cntlm)

Nota #2: Quando tentei instalar o rails usando o comando:

sudo gem install --http-proxy http://localhost:3128 rails dava erro de dependências:

ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: rails requires activesupport (= 3.2.8), actionpack (= 3.2.8), activerecord (= 3.2.8), activeresource (= 3.2.8), actionmailer (= 3.2.8), railties (= 3.2.8)

Executei o comando abaixo 2 vezes:

sudo gem install --http-proxy http://localhost:3128 rails  --include-dependencies

Só na segunda vez funcionou. Segue a saída:

INFO:  `gem install -y` is now default and will be removed
INFO:  use --ignore-dependencies to install only the gems you list
Fetching: mime-types-1.19.gem (100%)
Fetching: polyglot-0.3.3.gem (100%)
Fetching: treetop-1.4.10.gem (100%)
Fetching: mail-2.2.19.gem (100%)
Successfully installed mime-types-1.19
Successfully installed polyglot-0.3.3
Successfully installed treetop-1.4.10
Successfully installed mail-2.2.19
4 gems installed
Installing ri documentation for mime-types-1.19...
Installing ri documentation for polyglot-0.3.3...
Installing ri documentation for treetop-1.4.10...
Installing ri documentation for mail-2.2.19...
Installing RDoc documentation for mime-types-1.19...
Installing RDoc documentation for polyglot-0.3.3...
Installing RDoc documentation for treetop-1.4.10...
Installing RDoc documentation for mail-2.2.19...

Executei o comando

rails -v

e a saída foi

Rails 2.2.3

Agora, quando criei um projeto usando o rails, seguindo a apostila da Caelum não funcionou do jeito esperado. Pois quando executei o comando:

o rails criou uma pasta new. Quando retirei a cláusula new o rails criou a pasta agenda do projeto, mas sem o arquivo Gemfile.
Como fazer nesse caso? Crio o Gemfile na mão? Ou ele não é necessário? Instalei o bundle mas ele não funciona sem o Gemfile…

Tudo bem @jamesfrj?

Então, faz sentido esse problema que você teve porque pelo que você postou a versão do rails que você conseguiu instalar foi a 2.2.3, e a apostila da Caelum é baseada no rails 3 (a última versão disponível no site usa o rails 3.2.x nos exemplos). Por isso o comando rails new não teve o efeito esperado.

Agora o que eu não sei te dizer ao certo é porque o comando sudo gem install --http-proxy http://localhost:3128 rails não funcionou. Se você executar um gem list rails aparecem várias versões da gem? Só por desencargo, verifica também a versão do rubygems: gem -v, a mais recente é a 1.8.24.

Vamos ver se a gente consegue botar esse ambiente para funcionar aí! =)

Então, ricardo.valeriano! Conforme você pediu seguem os comandos e suas saídas:

gem list rails

*** LOCAL GEMS ***
rails (2.2.3)

gem -v

Não estou conseguindo instalar essa versão do rails. Dá erro de dependências com os dois comandos abaixo:
sudo gem install --http-proxy http://localhost:3128 rails
sudo gem install --http-proxy http://localhost:3128 rails --include-dependencies
O erro é esse:

ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: rails requires activesupport (= 3.2.8), actionpack (= 3.2.8), activerecord (= 3.2.8), activeresource (= 3.2.8), actionmailer (= 3.2.8), railties (= 3.2.8)

O que você acha melhor fazer? Desinstalar o rails? Existe alguma forma de resolver essas dependências?
Mais uma vez obrigado!

Agora foi! Quando executei o comando informando a versão do rails desejada (3.05)

ele instalou a versão da apostila (Ufa!)
Dessa vez quando criei o projeto com

apareceu o projeto com o GemFile dentro!
Valeu a ajuda aí ricardo.valeriano

Opa! Legal que deu certo @jamesfrj.

Recomendo usar a versão 3.2.8, a apostila que está atualmente no site é compatível com essa versão, baixe lá a versão nova e bons estudos! :smiley:

Instalado Rails 3.2.8, ricardo.valeriano.

E para terminar este post:
Tive um problema com o comando bundler install por causa de proxy também! :shock:
Para resolver alterei as seguintes linhas do arquivo GemFile (detro da pasta do projeto) :

source 'http://rubygems.org'
source 'http://rubygems.org', :proxy =>'localhost:3128'
source 'http://rubygems.org', :proxy => true

Alterei os arquivos .bashrc e /etc/environment com o seguinte:
.bashrc

export http_proxy=http://localhost:3128
export HTTP_PROXY=http://localhost:3128

/etc/environment

http_proxy="http://localhost:3128";
HTTP_PROXY="http://localhost:3128";

Reiniciei o micro e o bundle install (executado dentro da pasta do projeto) funcionou 100%
Obs.:Lembrando que configurei o cntlm com as informações de usuário, senha, proxy NTLM e porta conforme post anterior em /etc/cntlm.conf
Bom, vou ficando por aqui. Obrigado pela ajuda mais uma vez ricardo.valeriano.
Grande abraço!

Boa @jamesfrj! :smiley: