jump to navigation

Migrar RubyGems de um interpretador para outro 26/Mar/2009

Apesar de não ser muito prático, é no entanto simples o suficiente para que possa de agora em diante não estar mais preso ao constrangimento de evoluir as versões quer do JRuby quer do Ruby.

O problema é que tenho imensas gems instaladas, quer num interpretador quer no outro. O problema agrava-se com ter duas máquinas: Windows no emprego e Ubuntu em casa. Além disso, no Windows também tenho o Ruby a correr sobre o Cygwin. E até agora era complicado gerir as gems – instalações e actualizações – entre todos estes “ambientes” Ruby.

Após uma análise, consegui chegar a este procedimento:

  1. Na versão anterior do interpretador, executo o comando “jruby S gem server”. Fica assim disponível um miniRubyGems local à máquina, que irá servir como repositório central à nova versão.

  2. Na versão seguinte,  executo por ordem estes comandos:

  1. jruby S gem list—source GEMS_LIST=”“; while read gemname; do GEMS_LIST=”$GEMS_LIST $gemname”; done < jruby.gems.lst

  2. jruby S gem install—source GEMS_LIST com o nome de todas as gems separados por espaço, variável essa que é então usada pelo comando de instalação de gems.

    O exemplo acima usa o JRuby, mas seria igual para Ruby. Basta não usar “jruby -S” antes do comando “gem”.

    Comments»

    1. José Carlos Monteiro - 26/Mar/2009

    No entanto, começar do zero e chegar a ter novamente todas as gems instaladas não é um processo limpo. Obtenho java.lang.OutOfMemoryError: Java heap space ou ERROR: could not find gem “xpto” locally or in a repository.

    Mesmo se instalar as gems uma a uma, com o comando “while read gemname; do jruby -S gem install—source http://localhost:8808 $gemname; done < jruby.gems.lst”, obtenho o erro:
    ERROR: While executing gem … (Errno::EACCES)

    Permission denied – Permission denied – C:/DevKits/Java/jruby-1.2.0/lib/ruby/gems/1.8/gems/flog-2.1.0/History.txt

    No Ubuntu, a resolução é simplesmente alterar as permissões para que o próprio user possa escrever sobre o ficheiro, mas no Windows – mesmo com o Cygwin – não consigo resolver este erro.