launchctl - usa rvm ao invés do sistema Ruby em scripts executados?

0

Eu tenho um job launchctl que defino como tal:

<key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>-c</string>
        <string>~/projects/script.sh</string>
    </array>

Quando eu executo script.sh manualmente, o script funciona bem, já que ele usa a versão rvm atualmente configurada do ruby. Quando eu executo isso através do launchctl, a versão system do Ruby é usada, o que quebra o script. Como posso obter esse script para ser executado com a versão correta do ruby disponível?

    
por Stefan Kendall 12.06.2012 / 16:53

2 respostas

0

Altere script.sh para definir a variável de ambiente PATH antes de chamar qualquer programa que dependa de PATH sendo configurado corretamente.

    
por 12.06.2012 / 18:34
0

A melhor maneira é usar um wrapper rvm, que carrega o ambiente ruby e executa o script. Para mais informações:

$ rvm help wrapper

Exemplo:

$ rvm wrapper 2.0.0 hello
$ hello_ruby -e "puts RUBY_VERSION"
$ hello_rake -T
$ which hello_ruby # => /Users/me/.rvm/bin/hello_ruby

... etc ...

E você pode usar "/Users/me/.rvm/bin/hello_ruby" como o executável nas configurações do launchd, e o ambiente rvm será configurado para você.

Isso também é muito bom de fazer sem especificar a versão exata do ruby, então quando um nível de patch sair, atualize o rvm e seus wrappers apontarão para o ruby patch mais recente sem precisar descarregar / carregar os arquivos launchd.

    
por 05.08.2013 / 06:00