Você tem que fazer instalações gem duplicados para JRuby & MRI?
-
16-09-2019 - |
Pergunta
Eu tenho JRuby e Ruby (MRI) instalado. Parece que eu preciso para instalar gemas duas vezes - uma vez para cada uma dessas plataformas. Isso é necessário ou eu estou fazendo errado? Depois que instalei o gem trilhos para MRI, eu deveria ter pontas JRuby a ele, ou era necessário que eu também chamar: "jruby -S gem install rails"
Solução
Se você definir GEM_HOME você pode compartilhar suas instalações gema.
Outras dicas
Você precisará instalar gemas para cada diferente instalação de rubi que você tem.
Algumas gemas alvo plataformas específicas, por exemplo, Mongrel (há um MRI e um JRuby). Além disso, JRuby não pode usar pedras preciosas que têm extensões nativas (código ou seja C) a menos que eles usam a FFI (que a maioria não - ainda).
Pessoalmente, tenho repos gem separadas para MRI e JRuby. O pouco de aborrecimento extra vale a pena a paz de espírito quando se tenta rastrear um problema.
É muito fácil ver o que cada um repo tem instalado:
jruby -S gem list --local
vs.
gem list --local
Você pode até escrever um script ruby ??para sincronizar uma lista gem para o outro, mas você tem que ter cuidado com gemas plataforma específica ....
Eu bati este problema ao criar minha jóia, jimmy_jukebox , mas fiz o meu trabalho gem com ambos.
Em primeiro lugar, JRuby não controla fork...exec
(e até mesmo responde: incorretamente para Process.respond_to?(:fork)
), então eu tive que rescue NotImplementedError
e uso Spoon.spawnp
vez.
Eu, então, criado (em / bin do meu GEM) emparelhado executáveis ??- play_jukebox
e jplay_jukebox
; e load_jukebox
e jload_jukebox
-. cada um com a linha shebang correta (/usr/bin/env ruby
ou /usr/bin/env jruby
)
Eu adoraria saber uma maneira melhor. Mas eu prefiro lidar com tudo dentro de uma única gem de manter e distribuir vários gemas.