我正在 Windows 10 WSL2 上测试 Rails 项目。我能够rails server
毫无问题地运行,但是当我运行时rails test test/integration
,NotImplementedError: 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
问问题
1279 次
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 回答