launchd
não usa o shell para executar programas; ele usa a chamada do sistema exec
. É por isso que o plist que você tem acima usa um array.
Você está definindo um único elemento desse array para uma string contendo um espaço, o que leva launchd
a tentar exec("/usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb")
- o que, com certeza, não é o nome de um arquivo. Em vez disso, você deseja definir a matriz:
<array>
<string>/usr/local/bin/ruby</string>
<string>/Users/radek/Sites/sinatrasvn/web.rb</string>
</array>
Isso passará os caminhos como argumentos individuais para exec()
, e a coisa certa acontecerá.