2013-03-04 4 views
0

У меня есть небольшой скрипт ruby, который работает отлично, когда я запускаю его вручную из командной строки. Он использует три драгоценных камня, которые я установил с помощью «gem install X», а в верхней части файла сценария у меня есть строки «require X». Все работает нормально.Запустить скрипт ruby ​​из задачи rake

Теперь я создаю задачу в Rake, которая вызовет мой рубиновый скрипт. Я пытался как использование

system("/tools/myscript.rb #{foo} #{bar}") 

и

`/tools/myscript.rb #{foo} #{bar}` 

но оба дают мне эту ошибку:

myscript.rb:2:in `require': no such file to load -- ruby-audio (LoadError)

Это кажется, что камень не правильно загружена. Я попытался добавить драгоценные камни в Gemfile моего приложения Rails, но после того, как все необходимые драгоценные камни были добавлены, и я запустил bundle update, это закончилось ошибкой с адаптером mysql, который не работает из моего сценария.

Но так как сценарий отлично работает из командной строки, я думал, что на самом деле должен быть простой способ вызвать его из задачи Rake.

Любые идеи?

+2

какой-либо конкретной причины, почему вы не интегрировать код на Ruby из сценария в задачу вместо обстреливать и выполнять скрипт в отдельном процессе? – awendt

+1

Да, 1) этот конкретный код делится другими вещами и 2) он скорее всего будет переписан на C++ позже. –

ответ

3

Использование

bundle exec <script> 

Чтобы быть уверенным, чтобы загрузить в комплекте Gems для сценария вы хотите запустить

+0

Пробовал как 'bundle exec rake mytask', так и' system ("bundle exec myscript.rb # {foo} # {bar}") '. Ничего не изменилось. –

+0

Вы могли бы дать вывод 'print \' ("listle list") \ ''? вы используете RVM? – toch

+0

'sh: список комплектов: не найдено'. Не слышал о RVM, пока вы не упомянули об этом. Поэтому, если Rails 3 по умолчанию использует его по умолчанию, то я думаю, что нет. –

Смежные вопросы