Ruby on rails NotImplementedError:fork()函数在此计算机上未实现
我正在Windows10WSL2上测试Rails项目。我能够毫无问题地运行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()我找不到文档,但很可
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内核。