node.js - Docker 上的 Rails 无法启动 - execjs 找不到 JavaScript 运行时(节点)
问题描述
我正在构建我的 rails 6.1.3.1 应用程序的 docker 版本。原始应用程序在带有 Node 的 Ubuntu 20.04.2 上运行良好,我大致从那里进行了设置。
在 Docker 中,Node 通过 NVM 可以正常安装,但不幸的是 Rails 在启动时没有找到它。似乎 Execjs gem 不知何故无法识别它。不过,看看它的源代码并没有帮助
Docker 创建期间的版本和路径检查按预期运行且没有错误。
非常感谢 :)
在这里,您会看到错误消息:
/usr/local/bundle/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /usr/local/bundle/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>'
from /usr/local/bundle/gems/execjs-2.7.0/lib/execjs.rb:4:in `<main>'
from /usr/local/bundle/gems/bootsnap-1.7.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
... etc. ...
from /usr/local/bundle/gems/spring-2.1.1/lib/spring/application.rb:139:in `run'
from /usr/local/bundle/gems/spring-2.1.1/lib/spring/application/boot.rb:19:in `<top (required)>'
from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
码头工人文件:
# Dockerfile
# Use ruby image to build our own image
FROM ruby:2.6.6
# We specify everything will happen within the /app folder inside the container
WORKDIR /app
# We copy these files from our current application to the /app container
COPY Gemfile Gemfile.lock ./
# install Node with NVM
# was a pain to make nvm run after install then followed https://stackoverflow.com/a/60137919/10297304
SHELL ["/bin/bash", "--login", "-i", "-c"] # different way of execution sources .bashrc..
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash
SHELL ["/bin/bash", "--login", "-c"] # back to normal
RUN nvm install 14.15.0
RUN nvm alias default v14.15.0
RUN npm install --global yarn
RUN gem install bundler:2.2.11 # otherwise version mismatch
RUN bundle install
RUN yarn install
RUN which node
RUN node -v
RUN nvm -v
RUN yarn -v
# We copy all the files from our current application to the /app container
COPY . .
# We expose the port
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
解决方案
我有同样的问题。将 Docker 引擎从 18 升级到 20 后,它得到了解决
推荐阅读
- ios - 在 Swift 4 中的 UITableView 的 didSelectRowAt 中指定单元格选择范围
- arrays - Swift - 嵌套字典
- reactjs - 我需要从手机麦克风获取音频流并在 linux 中播放
- ios - 更新 UIImageView 而不重新加载所有数据
- postgresql - 如何使用 codeigniter 进行操作
- python - 每当 null 被强制进入模型的字段时,转到默认字符串
- azure - 作为数组复制()的参数在资源中不起作用
- python - 将字符串从列表插入数据框公式以在熊猫中循环计算
- swift - 虽然我做了可选绑定,但我收到错误“致命错误:在展开可选值时意外发现 nil”
- google-bigquery - 是否可以在 BigQuery 网络控制台中设置默认区域?