NotImplementedError: функция fork () не реализована на этой машине - PullRequest
0 голосов
/ 16 июня 2020

Я тестирую проект Rails на Windows 10 WSL2. Мне удалось запустить rails server без проблем, но когда я запускаю rails test test/integration, я получаю NotImplementedError: fork() function is unimplemented on this machine ошибку
Ruby версия: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Версия Rails: Rails 5.2.0
Ubuntu: 20,04

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

В этой документации сказано, что

fork (2) недоступен на некоторых платформах, таких как Windows и NetBSD 4. Поэтому вам следует использовать spawn ( ) вместо fork ().

Итак, ваша жемчужина для тестирования пытается вызвать эту функцию. Вам нужно открыть гем ruby в текстовом редакторе и изменить скрипт, в котором написана функция 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);
    }
}

В качестве альтернативы вы можете протестировать интеграцию, сохранив отдельную копию вашего приложения rails в среде windows: клонируйте ее из своего github

git clone <the path for your remote repository>

А затем в своем гем-файле раскомментируйте драгоценные камни под последней строкой, где сказано:

Windows does not have ...

От это #gem zinfo [...]

К этому:

gem zinfo [...]

Последним запустите

bundle install

для обновления ваш lock.gemfile.

0 голосов
/ 16 июня 2020

Я не могу найти документацию, но, скорее всего, WSL не поддерживает функцию fork().

Вы можете попробовать использовать spawn() вместо fork().

...