如何在AWS CodeDeploy上为Ruby on Rails编写appspec.yml

问题描述 投票:1回答:2

我正在尝试将我的Rails应用程序从Heroku迁移到AWS。我让我的AWS CodePipeline工作到最后一点,为CodeDeploy编写appspec.yml。

这需要我编写Ubuntu命令来停止我的应用程序,可能会做一些迁移,然后再次启动应用程序。

这不是我的强项,所以我在这方面有点挣扎。我以为我会先将“rails server”作为“AfterInstall”动作执行。但后来我打开了一大堆新问题,即EC2实例上没有安装Rails和Bundler等。虽然我一次只想解决一个迷你问题但我想知道我是否应该真正写这个文件从头开始。

所以这是我的问题:对于使用CodeDeploy部署的所有Rails应用程序,这有点相同吗?不应该已经可以使用,希望由一个比我更了解他或她正在做什么的人来完成?我没有通过谷歌找到太多,所以我希望有人可以为我揭示这一点。我担心即使我开始工作它也不会是一个好的和强大的,生产就绪的appspec.yml到底...

非常感谢!

ruby-on-rails amazon-web-services aws-code-deploy aws-codepipeline
2个回答
4
投票

听起来你正试图直接在EC2实例上运行rails服务器,我可能会将NGINX与Passenger一起使用,因为在部署之后重新启动你的Rails应用程序就像运行安装后脚本来触摸tmp / restart.txt一样简单导致乘客重新启动应用程序。

我搜索了一下,发现了以下帖子,他们也在使用NGINX和Passenger,它看起来非常像我会采取的方法,我可以看到它们包括安装脚本之前和之后。

http://sfviapgh.com/blog/2016/2/18/how-to-deploy-rails-with-aws-codedeploy

以防万一这里的帖子以后不可用是关键点:

  1. 使用生产服务器所需的一切设置EC2实例。在我们的例子中,这是Ruby,Passenger和nginx。您不希望提前通过git将应用程序克隆到服务器,但是您需要知道应用程序在服务器上的位置路径(例如www / var / ...)。确保您知道将为每个进程使用哪些用户(克隆代码,重新启动进程)。
  2. 将AWS CodeDeploy代理安装到服务器上。
  3. 将EC2实例移动到生产应用程序组AMI。
  4. 在我们的代码库中,我们将以下bash脚本添加到/ script文件夹中。我们的完整脚本有点复杂(从安全的s3存储桶中克隆我们的环境变量),但这些将使您获得可靠的开始。 CodeDeploy目前只挂钩到GitHub。幸运的是,GitHub是我们用来管理代码库的东西。
  5. 在应用程序的根目录中设置引用这些脚本的必需AWS CodeDeploy appspec.yml(参见下文)。

application / appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: <the directory your code will live>
permissions:
  - object: <the directory your code will live>
    owner: <user who will deploy your code>
    group: <group that user lives in>
  AfterInstall:
    - location: script/AfterInstall.sh
      runas: <user who will deploy your code>
  ApplicationStart:
    - location: script/ApplicationStart.sh
      runas: <root user>

应用程序/脚本/ AfterInstall.sh

#!/bin/bash
cd /var/www/<app location>
RAILS_ENV=production bundle install --path vendor/bundle
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:clobber
RAILS_ENV=production bundle exec rake assets:precompile

应用程序/脚本/ ApplicationStart.sh

#!/bin/sh
sudo service nginx restart

我希望这可以帮助您进一步部署。


0
投票

Travis tutorial。这为您提供了逐步设置的方法。希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.