You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google App Engine Ruby2.7资产预编译失败:ExecJS运行时缺失如何修复?

问题分析与修复方案

问题根源

从日志信息来看,GAE构建系统的Ruby版本不匹配是核心问题:

  • 构建包错误使用了Ruby 3.0镜像,而非你指定的ruby27环境
  • 回溯信息出现Ruby 2.7.0,与你实际使用的2.7.7不一致,导致ExecJS运行环境混乱,即便安装了NodeJS也无法被正确检测

修复步骤

1. 强制锁定Ruby精确版本

  • 修改Gemfile中的Ruby版本声明,从模糊匹配改为精确值:
    # 原配置
    # ruby ~> "2.7.0"
    # 修改为
    ruby "2.7.7"
    
  • 执行bundle update --ruby更新Gemfile.lock,确保构建系统严格使用2.7.7版本

2. 显式指定GAE构建镜像版本

在app.yaml中添加runtime_config配置,强制GAE使用对应版本的ruby27镜像:

runtime: ruby27
runtime_config:
  ruby_version: 2.7.7

3. 让ExecJS正确识别NodeJS

两种方式二选一即可:

  • 方式一:在代码中指定运行时
    在config/application.rb中添加:
    ExecJS.runtime = ExecJS::Runtimes::Node
    
  • 方式二:通过环境变量指定
    在app.yaml的env_variables中添加:
    env_variables:
      EXECJS_RUNTIME: Node
    

4. 验证构建依赖配置

  • 确认.gcloudignore中已正确添加/public/assets,避免本地预编译的资产干扰构建过程
  • 确保Gemfile中显式包含必要依赖:
    gem 'execjs'
    gem 'uglifier' # 若使用JS压缩功能
    

内容的提问来源于stack exchange,提问作者hamx0r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:02:01