0

我正在 Windows 10 WSL2 上测试 Rails 项目。我能够rails server毫无问题地运行,但是当我运行时rails test test/integrationNotImplementedError: fork() function is unimplemented on this machine出现错误
Ruby version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Rails version: Rails 5.2.0
Ubuntu: 20.04

4

2 回答 2

2

在这个文档上,据说

fork(2) 在 Windows 和 NetBSD 4 等某些平台上不可用。因此您应该使用 spawn() 而不是 fork()。

因此,您的测试 gem 正在尝试调用此函数。您需要在文本编辑器中打开 ruby​​ gem 并更改编写函数fork()的脚本,替换为spawn()。由此:

static VALUE
rb_f_fork(VALUE obj)
{
    rb_pid_t pid;

    switch (pid = rb_fork_ruby(NULL)) {
      case 0:
        rb_thread_atfork();
        if (rb_block_given_p()) {
            int status;
            rb_protect(rb_yield, Qundef, &status);
            ruby_stop(status);
        }
        return Qnil;

      case -1:
        rb_sys_fail("fork(2)");
        return Qnil;

      default:
        return PIDT2NUM(pid);
    }
}

对此

static VALUE
rb_f_fork(VALUE obj)
{
    rb_pid_t pid;

    switch (pid = rb_fork_ruby(NULL)) {
      case 0:
        rb_thread_atfork();
        if (rb_block_given_p()) {
            int status;
            rb_protect(rb_yield, Qundef, &status);
            ruby_stop(status);
        }
        return Qnil;

      case -1:
        rb_sys_fail("spawn(2)");
        return Qnil;

      default:
        return PIDT2NUM(pid);
    }
}

或者,您可以在 Windows 环境中测试集成,维护您的 Rails 应用程序的单独副本:从您的 github 克隆它

git clone <the path for your remote repository>

然后,在您的 gemfile 中,取消注释最后一行下方的 gem:

Windows does not have ...

由此 #gem zinfo [...]

对此:

gem zinfo [...]

最后,运行

bundle install

更新您的 lock.gemfile。

于 2020-06-16T06:27:45.117 回答
0

我找不到文档,但很可能,WSL 不支持fork()功能。

您可以尝试使用spawn()而不是fork().

于 2020-06-16T06:02:54.653 回答