2011-04-09 2 views
10

У меня есть рубиновый скрипт, из которого я хочу запустить четыре рейк-задачи для параллельной работы.Как запустить несколько граблей параллельно с ruby-скриптом

Как это сделать? Я думаю, мне нужно будет вилка и отсоединить процесс, но мне нужен точный синтаксис.

ответ

16

Это лучше если вы позволите Рейку справиться с параллелизмом. Вы можете сделать это, используя «многозадачность». Внутри Rakefile:

desc "Start everything." 
multitask :start => [ 'mongodb:start', 'haystack:start' ] 

Background and source.

В противном случае, предполагая, что вы делаете это из-за пределов Rakefile, вы могли бы использовать ужасный код, подобный этому, который бы не бросать исключения, как можно было бы ожидать, и легко может терпеть неудачу в ряде способов:

require 'rake' 
load 'Rakefile' 

def invoke(name) 
    Thread.new do 
    puts Rake::application[name].invoke 
    end 
end 

invoke :make_coffee 
invoke :boil_eggs 
invoke :empty_trash 

(так что не делайте этого)

+0

Мне действительно не нравится это как решение. Это работает отлично, пока эта конкретная точка входа используется для запуска сборки; однако, просто побить мертвую лошадь (опция «-j»): с помощью «make» я могу выбрать любую цель, которую я хочу (например, дать явный путь для конкретной библиотеки, которая будет построена, в отличие от указания одного из удобностей цели, добавленные разработчиком сборки) ... пока я поставлю параметр '-j', он строит параллельно. Похоже, что это конкретное решение будет работать только до тех пор, пока у вас есть что-то на месте, чтобы использовать «многозадачность» в любом месте, где это может быть необходимо. –

+0

@BrianVandenberg проверяет параметр командной строки '--multitask', он делает так, что все задачи рассматриваются как многозадачные. –

1

делают имеет аналогичную функцию (-j), который позволяет для одновременного запуска нескольких задач.

есть запрос тянуть открытый, чтобы иметь эту функцию доступной рейки: https://github.com/jimweirich/rake/pull/113

и вилка рейки с -j реализованной: https://github.com/quix/rake

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