Altere script.sh
para definir a variável de ambiente PATH
antes de chamar qualquer programa que dependa de PATH
sendo configurado corretamente.
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?
Altere script.sh
para definir a variável de ambiente PATH
antes de chamar qualquer programa que dependa de PATH
sendo configurado corretamente.
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.