代码之家  ›  专栏  ›  技术社区  ›  hendrikbeck

如何编写appspec。AWS CodeDeploy上Ruby on Rails的yml

  •  3
  • hendrikbeck  · 技术社区  · 7 年前

    我正在尝试将我的Rails应用程序从Heroku迁移到AWS。我让我的AWS代码管道一直工作到最后一点,编写appspec。yml用于CodeDeploy。

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

    这不是我的强项,所以我在这部分有点挣扎。我想我应该从执行“rails服务器”作为“AfterInstall”操作开始。但后来我发现了一整箱新问题,即EC2实例上没有安装Rails和Bundler等。。当我试图一次只解决一个小问题时,我想知道我是否应该从头开始写这个文件。

    所以我的问题是:对于所有使用CodeDeploy部署的Rails应用程序来说,这不是有些相同吗?难道这不应该已经实现了吗?希望有人比我更了解他或她到底在做什么?我在谷歌上找不到太多东西,所以我希望有人能帮我弄明白这一点。我担心,即使我让它工作起来,它也不会是一个好的、健壮的、可用于生产的appspec。无论如何,yml最终。。。

    已经非常感谢了!

    2 回复  |  直到 7 年前
        1
  •  5
  •   Thomas Bindzus    7 年前

    听起来您正试图在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 bucket克隆我们的env vars),但这些将让您有一个坚实的开始。CodeDeploy当前仅挂钩到GitHub。幸运的是,GitHub是我们用来管理代码库的工具。
    5. 设置所需的AWS CodeDeploy appspec。yml位于引用这些脚本的应用程序的根目录下(请参见下文)。

    应用程序/应用规范。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>
    

    应用程序/脚本/后安装。上海

    #!/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
    

    应用程序/脚本/应用程序启动。上海

    #!/bin/sh
    sudo service nginx restart
    

    我希望这能进一步帮助您进行部署。

        2
  •  0
  •   i_use_the_internet    7 年前

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