在 AWS 弹性 beantalk 上使用 webpacker gem 部署 rails react 应用程序

Posted

技术标签:

【中文标题】在 AWS 弹性 beantalk 上使用 webpacker gem 部署 rails react 应用程序【英文标题】:Deploy rails react app with webpacker gem on AWS elastic beanstalk 【发布时间】:2018-07-25 17:08:42 【问题描述】:

我正在尝试使用 AWS Elastic Beanstalk 部署使用 webpacker gem 创建的 rails 5.1 & react 应用程序。问题是我不断收到以下错误:

Webpacker requires Node.js >= 6.0.0 and you are using 4.6.0

我在我的计算机上使用 Node 9.5.0。有什么建议吗??

【问题讨论】:

【参考方案1】:

使用 yum 安装 nodejs(假设您使用的是默认的 Amazon Linux)

https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum -y install nodejs

现在要在您的实例上执行此操作,您需要将所需的命令添加到 .ebextensions 目录内的配置文件中,例如:.ebextensions/01_install_dependencies.config

文件内容:

commands:
  01_download_nodejs:
    command: curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
  02_install_nodejs:
    command: yum -y install nodejs

【讨论】:

关于这个的问题。我有默认的.elasticbeanstalk 文件夹是.ebextensions 一个完全不同的文件夹? @SimonCooper 是的,.elasticbeanstalk 文件夹包含本地 eb CLI 环境和其他内容的配置 您也可以通过 ssh 进入实例并使用 sudo 执行这些命令:在控制台中输入 eb ssh @Borzh 正如您通过 ssh 登录到 eb 实例时所说:Changes made via SSH WILL BE LOST if the instance is replaced by auto-scaling.【参考方案2】:

对于那些还需要安装 Yarn 的人,我发现以下内容对我很有效:

commands:
  01_install_yarn:
    command: "sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo && curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash - && sudo yum install yarn -y"
  02_download_nodejs:
    command: curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
  03_install_nodejs:
    command: yum -y install nodejs

【讨论】:

【参考方案3】:

对于那些在升级到 Rails 6 时发现此问题的人,I wrote a post 了解如何修复它。

基本上,您必须:

在应用程序的顶层创建目录 .ebextensions 创建 .config 文件,其中包含修复部署的命令(此处为脚本) 添加将 nodejs 升级到 >=6.14.4 的命令 添加容器命令以安装 webpack 和预编译资产 通过弹性豆茎禁用资产构建 将 RAILS_SKIP_ASSET_COMPILATION 设置为 True

这相当于:

commands:

  01_install_yarn:
    command: "sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo && curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash - && sudo yum install yarn -y"
  02_download_nodejs:
    command: curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
  03_install_nodejs:
    command: yum -y install nodejs

container_commands:

  04_install_webpack:
    command: npm install --save-dev webpack
  05_precompile:
    command: bundle exec rake assets:precompile

【讨论】:

我收到一条错误消息,上面写着error @rails/webpacker@4.2.0: The engine "node" is incompatible with this module. Expected version ">=8.16.0". Got "6.17.1"。我认为 Rails Webpacker 需要一个比8.16.0 更好的版本。我更新了设置脚本(在您的 01 和 02 步骤中)以使用 setup_13.x。不知道为什么,但日志仍然告诉我我正在使用 Node 6.x 并且需要 8.x+ 也许将command: "yum clean all" 添加到03_install_nodejs:

以上是关于在 AWS 弹性 beantalk 上使用 webpacker gem 部署 rails react 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS 弹性 beantalk 上使用 webpacker gem 部署 rails react 应用程序

Flask 应用程序未在 AWS 弹性 beantalk 上部署

sqlite3.OperationalError:在 AWS 弹性 beantalk 上部署时 SQL 变量过多

使用 aws fargate 有啥缺点(缺点)以及为啥我的 laravel 应用程序在 Fargate 与弹性 beantalk 上运行缓慢?

如何将自签名证书分配给 AWS 弹性 beantalk 应用程序

使用弹性 beantalk 问题部署 Asp.net Web 应用程序