在 nanoc live 中用 spawn() 替换 fork()

问题描述 投票:0回答:0

我遇到了 Ruby 的问题。具体来说,

spawn()
fork()
方法。

我正在 Windows 上使用 Nanoc 开发一个网站,在尝试实现

nanoc-live
gem 时,我收到消息说
fork()
在这台机器上没有实现。

在研究了我能做的事情之后,我真正回来的唯一一件事就是用

spawn()
代替它。但是,我不知道红宝石。 nanoc-live 文档已关闭。我问过他们没有运气的支持论坛。

我不会轻易地询问如何做到这一点,因为我喜欢弄清楚问题,但这让我感到难过,而且我几乎不是 Ruby 开发人员。我将如何替换下面的方法调用以便它使用

spawn()
?或者,如果有人的后兜里有不同的解决方案,那也很好。

Ruby version 3.2.2
Nanoc version 4.12.15
Windows 10

这是违规的方法

      def run_parent
        # create initial child
        pipe_read, pipe_write = IO.pipe
        fork { run_child(pipe_write, pipe_read) { |s| yield(s) } }  Here is the method call
        pipe_read.close

        changes = gen_lib_changes
        puts 'Listening for lib/ changes…'
        changes.each do |_e|
          # stop child
          pipe_write.write('q')
          pipe_write.close
          Process.wait

          # create new child
          pipe_read, pipe_write = IO.pipe
          fork { run_child(pipe_write, pipe_read) { |s| yield(s) } }
          pipe_read.close
        end
      rescue Interrupt
      end

这是

fork()

调用的run_child方法
def run_child(pipe_write, pipe_read)
        pipe_write.close

        site = Nanoc::Core::SiteLoader.new.new_from_cwd
        changes_enum = gen_changes_for_child(site)
        yield(site)

        quit = Object.new
        parent_enum = Enumerator.new do |y|
          pipe_read.read
          y << quit
        end

        puts 'Listening for site changes…'
        SlowEnumeratorTools.merge([parent_enum, changes_enum]).each do |e|
          break if quit.equal?(e)

          $stderr.print 'Reloading site… '
          $stderr.flush
          site_loader = Nanoc::Core::SiteLoader.new
          site = Nanoc::Core::Site.new(
            config: Nanoc::Core::ConfigLoader.new.new_from_cwd,
            data_source: site_loader.gen_data_source_for_config(site.config),
            code_snippets: site.code_snippets,
          )
          $stderr.puts 'done'

          yield(site)
        end

        exit 0
      rescue Interrupt
        exit 0
      end

提前致谢。

ruby rubygems fork spawn nanoc
© www.soinside.com 2019 - 2024. All rights reserved.