ExecJS:RuntimeUnavailable: 找不到 JavaScript 运行时 Docker 应用程序

5
我正在尝试使用 Docker 构建一个容器化的 Rails 应用程序。在我的 Gemfile 中,已经存在 execjs gem。然而,在运行服务器时,我遇到了以下错误:
ExecJS:RuntimeUnavailable: Could not find a javascript runtime 进一步挖掘后,我发现添加 gem therubyracer 或 mini_racer 可以解决这个问题。然而,添加后我会遇到以下错误:
Unable to load application: LoadError: Error relocating /usr/local/bundle/gems/therubyracer-0.12.3/lib/v8/init.so: __vfprintf_chk: symbol not found - /usr/local/bundle/gems/therubyracer-0.12.3/lib/v8/init.so
请帮忙解决。

2
如果我没记错的话,你需要安装node或其他JS环境。 - Nikos M.
2
为了详细说明@NikosM.所说的,您需要在Docker镜像中安装nodejs,例如在Debian/Ubuntu上,您需要运行apt install nodejs,或者在Alpine上运行apk add nodejs - anothermh
嘿,非常感谢。我需要在我的Docker镜像中安装Node.js。apk add nodejs 对我很有用。 - cop
2个回答

1
这个问题是由于 therubyracer gem没有被拥有者积极维护而引起的。
当我从 ruby:2.6.5-slim 切换到 ruby:2.6.5-alpine docker 镜像时,我也遇到了同样的问题。 经过几个小时的搜索,我找到了解决方法。
安装 nodejspython v2.7 包,并在 Gemfile 中添加以下 gem:
gem 'libv8-alpine', '~> 6.7', '>= 6.7.288.46.1'
同时从 Gemfile 中删除 gem 'therubyracer'
参考资料:
libv8-alpine
enter link description here

0

升级 execjs gem。

在现代的 Mac 上,JSC 存储在不同的位置。当我在新的 M1 Mac mini 上运行 Big Sur 时设置我们的 Rails 应用程序时,我遇到了这个错误信息。

升级到 execjs 2.8.0+ 可以解决这个问题:

Gemfile

gem "execjs", "2.8.1"

您可以在此处查看合并提交:

https://github.com/rails/execjs/pull/98


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接