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:
- 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. - Na versão seguinte, executo por ordem estes comandos:
- jruby
S gem list—source GEMS_LIST=”“; while read gemname; do GEMS_LIST=”$GEMS_LIST $gemname”; done < jruby.gems.lst - 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”.
- Posted in : doCoding
- Author : José Carlos Monteiro
Comments»
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.