В общем треды в Руби говно (1, 2). Пришлось заюзать процессы. Но процессам нужно между собой как-то общаться. Для этого в рубях придумалинаписали DRb. Такой себе IPC «для бедных» (c) для богатых(потому что есть небольшой overhead) неосиляторов как я (наверно здесь должен быть смайлик, но я не уверен какой лучше: грустный или веселый).
Хватит сказок, пора к делу. Если кто помнит у меня есть таски без и с зависимостями. Так вот таски без зависимостей мой велосипед щелкает как орехи, а как только встречает с зависимостями сразу же сыплет трейсами но не сдается^W^W^W и висит.
Еще ньюанс - если в предыдущей «сессии» «удовлетворить» все зависимости таска, а в следующей запустить только его то все ОК. Но это ничего не значит ибо проверка зависимостей, выполненых в предыдущей сессии и выполняемых в поточной происходит в разных методах (prev vs curr)
Как-то так. Если что-то непонятно, то спрашивайте ибо я мастер объяснить что-нибуть простое архи запутанно.
Сама ошибка в примере когда запускаются таски с 1 по 4; №1 и №2 есть зависимостями №3
vv@vv-Latitude-E5520 ~/work/own/ruby/portage3/bin $ ./03_fill_db.rb -u 4
/usr/lib/ruby/1.9.1/drb/drb.rb:585:in `load': incompatible marshal file format (can't be read) (/usr/lib/ruby/1.9.1/drb/drb.rb:573:in `load'TypeError)
: format version 4.8 required; 0.0 giventoo large packet 67654656
(DRb::DRbConnError from /usr/lib/ruby/1.9.1/drb/drb.rb:585:in `block in load'
)
from <internal:prelude>:10:in `synchronize'
from /usr/lib/ruby/1.9.1/drb/drb.rb:632:in `recv_reply'
from /usr/lib/ruby/1.9.1/drb/drb.rb:581:in `load'
from /usr/lib/ruby/1.9.1/drb/drb.rb:918:in `recv_reply'
from /usr/lib/ruby/1.9.1/drb/drb.rb:632:in `recv_reply'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1197:in `send_message'
from /usr/lib/ruby/1.9.1/drb/drb.rb:918:in `recv_reply'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1088:in `block (2 levels) in method_missing'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1197:in `send_message'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1172:in `open'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1088:in `block (2 levels) in method_missing'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1087:in `block in method_missing'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1172:in `open'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1105:in `with_friend'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1087:in `block in method_missing'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1086:in `method_missing'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1105:in `with_friend'
from /home/vv/work/own/ruby/portage3/lib/common/runner.rb:34:in `initialize'
from /usr/lib/ruby/1.9.1/drb/drb.rb:1086:in `method_missing'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `new'
from /home/vv/work/own/ruby/portage3/lib/common/runner.rb:34:in `initialize'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `block in run_task'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `new'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `fork'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `block in run_task'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `run_task'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `fork'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:79:in `block in run_specified_tasks'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `run_task'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `map!'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:79:in `block in run_specified_tasks'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `run_specified_tasks'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `map!'
from ./03_fill_db.rb:100:in `<main>'
from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `run_specified_tasks'
from ./03_fill_db.rb:100:in `<main>'