ruby-on-rails 如何强制AWS Code Deploy保持钩子之间的状态?

rbl8hiat  于 2023-01-10  发布在  Ruby
关注(0)|答案(1)|浏览(106)

这是我第一次使用AWS的代码部署,所以我可能/希望错过了一些明显的东西。
我正在尝试通过Code Deploy将Ruby On Rails应用程序部署到EC2。
最初我想要两个AfterInstall stage,一个用来安装系统需要的东西(RVM,Ruby,Postgres),一个用来安装gem,然而,第二个AfterInstall不会看到rvmbundle,为了节省时间,我想我会担心稍后把它和bundle install分开放在同一个钩子中,这很有效。
我的问题是ApplicationStart,它不能看到bundle--这使得bundle exec puma...不可能。我想这可能是因为rvm不知道使用哪个版本的Ruby,所以我添加了一个rvm use ruby-3.1.0,但它不能看到rvm
有人能解释一下我错过了什么,这将允许个人钩建立了什么之前?
我的appspec.yml看起来像这样;

version: 0.0
os: linux
files: #copy files
  - source: /
    destination: /var/www/timesheets/deployment
permissions: # def need deployment dir set to ec2-user, maybe not rvm?
  - object: /var/www/timesheets/deployment
    owner: ec2-user
    group: ec2-user
  - object: /usr/local/rvm
    owner: ec2-user
hooks:
  BeforeInstall:
    - location: deploy/arrange_folders
      runas: root
  AfterInstall:
    - location: deploy/install
      timeout: 900
  ApplicationStart:
    - location: deploy/start

BeforeInstall钩子移动一些将要备份以前部署的文件夹。
我的install脚本;

#!/bin/bash
set -e #exit on error

sudo yum install postgresql-devel
sudo amazon-linux-extras install postgresql13

mkdir -p /var/www/timesheets
cd /var/www/timesheets

curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -

curl -L get.rvm.io | bash -s stable

source /etc/profile.d/rvm.sh

rvm install ruby-3.1.0

gem install bundler

cd /var/www/timesheets/deployment

bundle install

我的start脚本;

#!/bin/bash
set -e #exit on error

cd /var/www/timesheets/deployment

source /home/ec2-user/.env # tmp way to grab some ENVs

# rvm use ruby-3.1.0 # commented out because it also breaks

bundle exec puma -C config/puma.rb

错误信息
[标准错误]/opt/代码部署代理/部署根目录/515737d9 - 378b-4ecc-b2a9 - 080af25cb74a/d-XKE49L7SL/部署存档/部署/启动:第6行:捆绑:未找到命令

注解

这是一个很大的尖峰,我知道,例如,有一个更好的方法来抓住gpg2的关键,我需要一个开放的另一个端口,我会得到周围!

9jyewag0

9jyewag01#

状态可能不是这里的问题,因为即使在同一脚本(install)中,也找不到您在(gem install)之前安装的命令(bundle)。
这里需要检查/考虑的几件事:

  • 考虑移动安装脚本。包管理器、框架等依赖项通常放在BeforeInstall挂钩中。请参阅此处了解更多信息。
  • 检查EC2示例上的完整CodeDeploy日志,查看是否存在任何其他问题。有关详细信息,请参阅here
  • 使用与目标示例相同的映像在新的EC2示例上运行相同的脚本,以验证是否成功执行。
  • 如果脚本成功运行,请在目标示例上验证部署程序包。有关详细信息,请参阅here

希望有助于找出根本原因!

相关问题