Скрипты VBS через веб-приложение Ruby - проблемы с многопоточностью - PullRequest
0 голосов
/ 18 марта 2019

У меня есть очень простое веб-приложение на Ruby (в настоящее время в Hanami и в Rails), которое предоставляет функции сценариев VBS для конечных пользователей.

В настоящее время это все еще в Windows.

Конечный пользовательпросто заполняет форму, и веб-приложение запускает соответствующий сценарий и возвращает пользователю либо запрошенные данные, либо просто уведомление об успехе / неудаче.

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

Я использую Hanami или Rails с Puma или Thin.Результатом всегда является последующая обработка.Несмотря на то, что это все еще в dev, я также пробовал рабочий режим с Hanami.

Для Rails я также пытался удалить Rack :: Lock, но безрезультатно.

Скрипт VBSсам переводится на Ruby через win32ole lib.

Забавно, если я запускаю тот же скрипт из простого файла .rb, например:

threads = []

threads << Thread.new{
  my_method(arg1, arg2)
}

threads << Thread.new{
  my_method(arg1, arg2)
}

threads << Thread.new{
  my_method(arg1, arg2)
}

threads.each {|t| t.join}

они работают параллельно.

EDIT start: custom logs for pure ruby script

Connection [3] is opened at: 2019-02-25 10:11:10 +0100
Connection [4] is opened at: 2019-02-25 10:11:10 +0100
Connection [5] is opened at: 2019-02-25 10:11:13 +0100
User in connection [3] is logged in at: 2019-02-25 10:11:15 +0100
User in connection [4] is logged in at: 2019-02-25 10:11:16 +0100
User in connection [5] is logged in at: 2019-02-25 10:11:19 +0100
Params in connection [4] are set in system at: 2019-02-25 10:11:20 +0100
Params in connection [3] are set in system at: 2019-02-25 10:11:21 +0100
System in connection [4] is closed at: 2019-02-25 10:11:21 +0100
System in connection [3] is closed at: 2019-02-25 10:11:26 +0100
Params in connection [5] are set in system at: 2019-02-25 10:11:26 +0100
System in connection [5] is closed at: 2019-02-25 10:11:27 +0100

Connection [0] is opened at: 2019-02-25 10:11:03 +0100
Connection [1] is opened at: 2019-02-25 10:11:03 +0100
Connection [2] is opened at: 2019-02-25 10:11:05 +0100
User in connection [0] is logged in at: 2019-02-25 10:11:08 +0100
User in connection [2] is logged in at: 2019-02-25 10:11:10 +0100
User in connection [1] is logged in at: 2019-02-25 10:11:10 +0100
Params in connection [0] are set in system at: 2019-02-25 10:11:12 +0100
Params in connection [1] are set in system at: 2019-02-25 10:11:12 +0100
System in connection [0] is closed at: 2019-02-25 10:11:13 +0100
System in connection [1] is closed at: 2019-02-25 10:11:17 +0100
Params in connection [2] are set in system at: 2019-02-25 10:11:17 +0100
System in connection [2] is closed at: 2019-02-25 10:11:19 +0100

В журналах выше показаны только секунды, но все же можно увидеть, что действия не являются полностью последовательными.Кроме того, я вижу сценарии, открывающие окна параллельно и выполняющие действия, тогда как в веб-приложении ясно, что второе окно сценария не открывается до тех пор, пока не закроется первое.

EDIT end

Я застрял и больше не знаю, куда идти дальше для отладки.

У кого-нибудь есть идеи?Спасибо.

себа

...