У меня есть работа launchctl, которую я определяю как таковой:

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

Когда я запускаю script.sh вручную, скрипт работает нормально, так как он использует текущую версию rvm версии ruby. Когда я запускаю это через launchctl, используется системная версия Ruby, что нарушает работу скрипта. Как я могу заставить этот скрипт работать с правильной версией ruby?

2 ответа2

0

Лучше всего использовать rvm "обертку", которая загружает среду ruby и затем запускает скрипт. Для получения дополнительной информации:

$ rvm help wrapper

Пример:

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

...так далее...

И вы можете использовать «/Users/me/.rvm/bin/hello_ruby» в качестве исполняемого файла в ваших конфигурациях launchd, и среда rvm будет настроена для вас.

Это также очень удобно делать без указания точной версии ruby, поэтому, когда выйдет уровень патча, обновите rvm и ваши обертки будут указывать на более новый исправленный ruby без необходимости выгружать / загружать файлы запуска.

0

Измените script.sh чтобы задать переменную среды PATH прежде чем она вызовет любые программы, которые зависят от того, правильно ли установлен PATH .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .