async-container
async-container copied to clipboard
Container example doesn't actually initialize anything
The container example runs without doing anything:
controller = Async::Container::Controller.new do |container|
Async.logger.debug(self, "Setting up container...")
container.run(count: 1, restart: true) do
Async.logger.debug(self, "Child process started.")
while true
sleep 1
if rand < 0.1
exit(1)
end
end
ensure
Async.logger.debug(self, "Child process exiting:", $!)
end
end
begin
controller.run
ensure
Async.logger.debug(controller, "Parent process exiting:", $!)
end
Where the output is:
0.11s: Object
| Starting up...
0.11s: Async::Container::Notify::Console
| {:status=>"Initializing..."}
0.11s: Async::Container::Controller
| Starting container...
0.11s: Async::Container::Controller
| Waiting for startup...
0.11s: Async::Container::Forked
| Waiting for ready:
0.11s: Async::Container::Controller
| Finished startup.
0.11s: Async::Container::Notify::Console
| {:ready=>true}
0.11s: Async::Container::Controller
| Parent process exiting:
There's no mention of a "Child process" in there because the block is ignored.
A reworked example that seems to function:
class ExampleController < Async::Container::Controller
def setup(container)
Async.logger.debug(self, "Container established.")
container.run(count: 1, restart: true) do |instance|
Async.logger.debug(self, "Child process started.")
Async do |task|
loop do
task.sleep(1)
end
end
instance.ready!
ensure
Async.logger.debug(self, "Child process exiting:", $!)
end
end
end
begin
controller = ExampleController.new
controller.run
ensure
Async.logger.debug(controller, "Parent process exiting:", $!)
end
Where the setup method needs to be customized. Presumably new could capture that block and use it within setup?
I had it that way before but decided against it as a general pattern it's too magical and literally doesn't even really save more than a few lines of code.