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

AWS EC2上Rails应用HomeController#index报错:rails-erb-loader相关问题

Rails 6 EC2环境下rails-erb-loader模块导致ExecJS::ProgramError问题排查

问题描述

在AWS EC2 Linux实例运行Rails应用时,HomeController#index触发ExecJS::ProgramError,错误关联rails-erb-loader模块,报错详情:

ExecJS::ProgramError in HomeController#index
Error: Module build failed (from ./node_modules/rails-erb-loader/index.js):
Rails.root: /home/ec2-user/siam-mha

Application Trace | Framework Trace | Full Trace
(execjs):279:18
(execjs):282:10
app/controllers/concerns/set_locale.rb:36:in `switch_locale'
Exception Causes
MiniRacer::RuntimeError: Error: Module build failed (from ./node_modules/rails-erb-loader/index.js):

环境信息

  • Rails版本:6.0.3.5
  • Ruby版本:2.7.2
  • Node.js版本:14.16.0

已尝试操作

  • 检查set_locale.rb文件未发现明显问题
  • 查阅rails-erb-loader文档排查配置问题

注:本地环境可正常运行,仅EC2开发环境出现该错误。

可能原因及解决方案

1. 依赖安装不完整或版本不一致

本地与EC2环境的npm依赖可能存在版本差异,或EC2上未正确安装全部依赖。

  • 解决方案:
    • 删除EC2上的node_modules目录和package-lock.json文件:
      rm -rf node_modules package-lock.json
      
    • 重新安装依赖:
      npm install
      
    • 确认package.json中rails-erb-loader版本与本地一致,若不一致,锁定版本后重新安装。

2. MiniRacer运行时环境问题

错误提示涉及MiniRacer::RuntimeError,可能是EC2上MiniRacer的系统依赖缺失或版本不兼容。

  • 解决方案:
    • 更新MiniRacer gem:
      bundle update mini_racer
      
    • 安装必要的系统依赖(以Amazon Linux 2为例):
      sudo amazon-linux-extras install epel -y
      sudo yum install libv8-devel -y
      
    • 重新编译MiniRacer:
      bundle config build.mini_racer --with-v8-dir=/usr
      bundle install
      

3. Webpacker配置差异

本地与EC2的Webpacker配置存在差异,导致rails-erb-loader处理ERB文件失败。

  • 解决方案:
    • 检查config/webpack/environment.js中rails-erb-loader的配置,确保与本地一致,示例配置:
      const { environment } = require('@rails/webpacker')
      const erb = require('./loaders/erb')
      environment.loaders.prepend('erb', erb)
      module.exports = environment
      
    • 重新编译Webpack资源:
      rails webpacker:compile
      
    • 确认EC2环境的RAILS_ENV设置为开发环境:
      export RAILS_ENV=development
      

4. 文件权限问题

EC2实例上的文件或目录权限不足,导致rails-erb-loader无法读取或写入文件。

  • 解决方案:
    • 调整应用目录权限,确保ec2-user拥有读写权限:
      sudo chown -R ec2-user:ec2-user /home/ec2-user/siam-mha
      
    • 确保tmp目录可写:
      chmod -R 755 tmp/
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:57:15