Rails 7.1.3配置RSPEC 6.1.2时遇JavaScript runtime缺失问题求解决
解决Rails 7.1 + Docker环境下ExecJS运行时缺失问题
问题根源
虽然Rails 7默认采用Importmap/Turbo等无需Node.js的前端方案,但execjs gem仍需要JavaScript运行时才能工作——你的Docker镜像里既没预装JS运行时,且Ruby版本(Dockerfile里的3.1.2)和Gemfile指定的3.3.0不匹配,双重问题导致报错。
解决方案(二选一即可)
方案一:在Docker镜像中安装系统级JS运行时
修改你的Dockerfile,同步Ruby版本并安装Node.js:
# Dockerfile.rails FROM ruby:3.3.0 # 更新系统包并安装Node.js(作为JavaScript运行时) RUN apt-get update && apt-get install -y nodejs npm --no-install-recommends # 清理缓存减小镜像体积 RUN apt-get clean && rm -rf /var/lib/apt/lists/* # 安装Rails和Bundler RUN gem install rails bundler
重新构建Docker容器后,ExecJS会自动检测到Node.js,即可正常执行rails generate rspec:install。
方案二:通过Gem提供JS运行时
如果不想在系统层面安装Node.js,可在Gemfile的development, :test组中添加mini_racer gem:
group :development, :test do gem "debug", platforms: %i[ mri mingw x64_mingw ] gem 'annotate' gem 'rspec-rails', '~> 6.1' # 添加mini_racer提供JavaScript运行时 gem 'mini_racer' end
执行bundle install后,ExecJS会使用mini_racer内置的V8引擎作为运行时,无需额外系统依赖。
内容的提问来源于stack exchange,提问作者user1185081
相关产品推荐
相关产品推荐

