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

时间:2018-02-18 06:14:57

标签: ruby-on-rails amazon-web-services aws-code-deploy aws-codepipeline

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

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

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

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

非常感谢!

2 个答案:

答案 0 :(得分:4)

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

我搜索了一下,找到了以下帖子,他们也在使用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(见下文)。
  6. <强>应用/ 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
    

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

答案 1 :(得分:0)

Travis tutorial。这为您提供了逐步设置的方法。希望它有所帮助。