为 Ruby on Rails 6 创建弹性 beanstalk 环境时遇到问题(rvm、rbenv、.ruby-version 问题)

Posted

技术标签:

【中文标题】为 Ruby on Rails 6 创建弹性 beanstalk 环境时遇到问题(rvm、rbenv、.ruby-version 问题)【英文标题】:Trouble creating elastic beanstalk environment for Ruby on Rails 6 (rvm, rbenv, .ruby-version issues) 【发布时间】:2020-11-27 03:56:05 【问题描述】:

我一直试图弄清楚如何在我的 macOS 上使用 cli 将一个简单的 rails 应用程序部署到弹性 beanstalk,但每次我到达 eb create 时都会收到此错误:

2020/08/06 07:22:56.626563 [INFO] Executing instruction: StageApplication
2020/08/06 07:22:56.626674 [INFO] extracting /opt/elasticbeanstalk/deployment/app_source_bundle to /var/app/staging/
2020/08/06 07:22:56.626695 [INFO] Running command /bin/sh -c /usr/bin/unzip -q -o /opt/elasticbeanstalk/deployment/app_source_bundle -d /var/app/staging/
2020/08/06 07:22:56.638657 [INFO] finished extracting /opt/elasticbeanstalk/deployment/app_source_bundle to /var/app/staging/ successfully
2020/08/06 07:22:56.640331 [INFO] Executing instruction: RunAppDeployPreBuildHooks
2020/08/06 07:22:56.640351 [INFO] The dir .platform/hooks/prebuild/ does not exist in the application. Skipping this step...
2020/08/06 07:22:56.640356 [INFO] Executing instruction: stage ruby application
2020/08/06 07:22:56.640360 [INFO] stage ruby application ....
2020/08/06 07:22:56.640386 [INFO] Running command /bin/sh -c bundle config set --local deployment true
2020/08/06 07:22:56.669550 [ERROR] An error occurred during execution of command [app-deploy] - [stage ruby application]. Stop running the command. Error: install dependencies in Gemfile failed with error Command /bin/sh -c bundle config set --local deployment true failed with error exit status 1. Stderr:rbenv: version `ruby-2.7.0' is not installed (set by /var/app/staging/.ruby-version)

然后我运行eb terminate,这样我就不会被收取任何费用。错误只是说我没有安装 2.7.0,即使我的 Gemfile 列出了 2.7.1 并且我运行 bundle install 没有任何问题。

对于 eb 平台版本,我选择了第一个选项 listed here,所以这将是 Ruby 2.7.1-p83,这是我的 ruby -v 当前返回的,所以我不确定它为什么要寻找 2.7.0 ...

我使用 rvm 来更新到最新的 Ruby,之前我有 Ruby 2.6.3,底部的错误是 'ruby-2.6.3' is not installed'。在我的 Mac 上使用 rbenv 更新到最新版本的 Ruby 很困难,我认为是因为我的系统版本的 Ruby 有问题?所以我从 brew 中删除了 rbenv 并开始使用 rvm 。但我觉得这就是问题所在,因为看起来弹性 beantalk 正在使用 rbenv 来尝试找到正确版本的 Ruby? Stderr:rbenv: version `ruby-2.7.0' is not installed

任何帮助或指导都将不胜感激,即使只是了解“.ruby-version”是什么或者 rvm 是否不应该用于部署。

【问题讨论】:

【参考方案1】:

".ruby-version" 是保存在项目根目录中的文件,指示您正在使用的 ruby​​ 版本,因此它会自动读取版本。 (如果这是你问的)

对于您的问题,您必须确保正确应用 ruby​​ 版本。

    检查安装在 EC2 实例中的 ruby​​ 版本。

您可以通过 ssh eb sshruby -v 进行检查 结果将是您需要使用的 ruby​​ 版本。 (最好直接在EC2实例上查看,如果通过EB查看可能会有所不同)

    确保您的.gemfile.ruby-version 文件声明了正确的版本。

如果您还没有.ruby-version 文件,请使用您在步骤 1 中获得的版本创建一个。

我正在处理同样的问题,并且安装在 EC2 实例中的 ruby​​ 版本与我创建 eb health --refresh 时返回的版本不同,所以我按照上述步骤然后重建我的环境并且它工作了,所以您可能还需要重建环境

【讨论】:

以上是关于为 Ruby on Rails 6 创建弹性 beanstalk 环境时遇到问题(rvm、rbenv、.ruby-version 问题)的主要内容,如果未能解决你的问题,请参考以下文章

应该如何使用 Amazon Web 服务及其弹性 beantalk 将机密文件推送到 EC2 Ruby on Rails 应用程序?

AWS SNS 和 Ruby on Rails SMTP

ruby on rails(基础)

让 Ruby-on-Rails 6/Webpack + Bootstrap 一起正常工作的问题

Ruby on Rails - 在 OSX 上使用 Ruby 2.4.4 而不是 rails 5.1.6 的配置问题/异常

使用 Ruby on Rails 时如何创建 Facebook 共享功能?