Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails NotImplementedError:fork()函数在此计算机上未实现_Ruby On Rails_Ruby_Windows_Ubuntu_Wsl 2 - Fatal编程技术网

Ruby on rails NotImplementedError:fork()函数在此计算机上未实现

Ruby on rails NotImplementedError:fork()函数在此计算机上未实现,ruby-on-rails,ruby,windows,ubuntu,wsl-2,Ruby On Rails,Ruby,Windows,Ubuntu,Wsl 2,我正在Windows10WSL2上测试Rails项目。我能够毫无问题地运行rails服务器,但是当我运行rails测试/集成时,我得到了NotImplementedError:fork()函数在这台机器上没有实现错误 Ruby版本:Ruby 2.5.1p57(2018-03-29修订版63029)[x86\u 64-linux] Rails版本:Rails 5.2.0 Ubuntu:20.04我找不到文档,但很可能WSL不支持fork()函数 您可以尝试使用而不是fork()我找不到文档,但很可

我正在Windows10WSL2上测试Rails项目。我能够毫无问题地运行
rails服务器
,但是当我运行
rails测试/集成
时,我得到了
NotImplementedError:fork()函数在这台机器上没有实现
错误
Ruby版本:
Ruby 2.5.1p57(2018-03-29修订版63029)[x86\u 64-linux]

Rails版本:
Rails 5.2.0


Ubuntu:20.04

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


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

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

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

在这方面,据说

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

所以您的gem for test正在尝试调用此函数。您需要在文本编辑器中打开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克隆

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

Windows没有…

由此
#gem zinfo[…]

为此:

gem zinfo[…]

到最后,跑

bundle安装

更新lock.gemfile。

关于这一点,据说

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

所以您的gem for test正在尝试调用此函数。您需要在文本编辑器中打开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克隆

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

Windows没有…

由此
#gem zinfo[…]

为此:

gem zinfo[…]

到最后,跑

bundle安装


更新你的lock.gemfile。

OP使用的不是Windows而是WSL2,它是一个合适的Linux系统,在精简的Hyper-V虚拟机监控程序上运行一个合适的Linux内核。这一事实让我想知道,gem在脚本shell安装中如何继续决定Windows脚本安装说明的以下部分。同样的情况也发生在我使用WSL2的机器上。OP使用的不是Windows,而是WSL2,这是一个合适的Linux系统,在精简的Hyper-V虚拟机监控程序上运行一个合适的Linux内核。这一事实让我想知道gem在其脚本外壳安装上,继续决定windows脚本安装说明的以下部分。同样的情况也发生在我使用WSL2的机器上。OP专门使用WSL2,它与WSL1有着根本的不同。当您说“WSL不支持
fork()
函数”时,您应该明确您所指的版本。特别是,WSL2是一个合适的Linux系统,在精简的Hyper-V虚拟机监控程序上虚拟化运行一个合适的Linux内核。OP专门使用WSL2,它与WSL1有根本不同。当您说“WSL不支持
fork()
函数”时,您应该明确您所指的版本。特别是,WSL2是一个合适的Linux系统,在精简的Hyper-V虚拟机监控程序之上虚拟化运行一个合适的Linux内核。