这是我第一次使用AWS的代码部署,所以我可能/希望错过了一些明显的东西。
我正在尝试通过Code Deploy将Ruby On Rails应用程序部署到EC2。
最初我想要两个AfterInstall
stage,一个用来安装系统需要的东西(RVM,Ruby,Postgres),一个用来安装gem,然而,第二个AfterInstall
不会看到rvm
或bundle
,为了节省时间,我想我会担心稍后把它和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的关键,我需要一个开放的另一个端口,我会得到周围!
1条答案
按热度按时间9jyewag01#
状态可能不是这里的问题,因为即使在同一脚本(
install
)中,也找不到您在(gem install
)之前安装的命令(bundle
)。这里需要检查/考虑的几件事:
BeforeInstall
挂钩中。请参阅此处了解更多信息。希望有助于找出根本原因!