在 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 上运行缓慢?