Подтвердить что ты не робот

Запуск файлов в каталоге, рекурсивно использующих ruby

Сейчас я работаю над script, который должен запускать каждый ruby ​​script в каталоге и его подпапках.

например.

run-all.rb
- scripts
  - folder1
    - script1.rb
    - script2.rb
  - folder2
    - script3.rb
    - script4.rb

Поскольку сервер является сервером Windows, я обычно использовал командный файл, но руководитель dev настаивает на том, что все должно быть сделано в рубине, так как некоторые члены имеют компьютеры Mac и могут не понимать пакетные файлы Windows.

Как мог бы быть вопрос, мои знания о Ruby очень просты.

4b9b3361

Ответ 1

Зависит от того, что вы подразумеваете под "run". Чтобы просто выполнить код, который находится в каждом script в рамках одного и того же рубинового процесса, это сделает трюк:

Dir["scripts/**/*.rb"].each{|s| load s }

Но вы хотите запустить каждый script в своем собственном рубиновом процессе, а затем попробуйте следующее:

Dir["scripts/**/*.rb"].each{|s| puts `ruby #{s}` }

Просто поместите одну из них в содержимое run-all.rb и запустите ruby run-all.rb в командной строке.

Ответ 2

Возможно, что-то вроде этого должно работать:

def process_directory(basedir)
puts basedir
Find.find(basedir.chomp) do |path|
    if FileTest.directory?(path)
        if File.basename(path)[0] == ?.
            Find.prune       # Don't look any further into this directory.
        else
            next
        end
    else
        puts path
    end
end