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

Kev*_*dos 3 ruby ruby-on-rails rvm rbenv amazon-elastic-beanstalk

我一直在尝试弄清楚如何使用 macOS 上的 cli 将简单的 Rails 应用程序部署到 Elastic 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)
Run Code Online (Sandbox Code Playgroud)

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

对于 eb 平台版本,我选择了此处列出的第一个选项,因此这将是 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。但我觉得这就是问题所在,因为看起来elastic beanstalk正在使用rbenv来尝试找到正确的Ruby版本? Stderr:rbenv: version `ruby-2.7.0' is not installed

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

小智 5

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

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

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

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

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

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

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