我想为现有的 Rails 应用程序设置 Elastic Beanstalk。
我成功完成了示例 foo 应用程序。
这些都是我的问题
我需要从我的 git 存储库进行部署,而不是从我部署的本地路径进行部署。对于示例 foo 应用程序,我该如何做到这一点。
git aws.push 命令似乎部署在新的 ec2 实例上。但是,它没有将更改推送到我的 git 存储库。在执行 git aws.push 之前,我应该单独执行 git push 吗?请注意,当我执行 git status 时,我的分支领先 1 次提交。aws 是否维护单独的 git 存储库?如何让它改用我的 git 存储库?
[mymac:~/Projects/new/foo(master)]$ git aws.push
Counting objects: 4949, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1115/1115), done.
Writing objects: 100% (4949/4949), 14.11 MiB | 1.90 MiB/s, done.
Total 4949 (delta 3800), reused 4944 (delta 3798)
remote:
To https://AKIAJZT3WFY2WLO6CHQQ:20121127T030627Zf56675b2f4c9c731ca6f51b11d36a438e8bcee25c5171061ce5ac681495318c9@git.elasticbeanstalk.ap-southeast-1.amazonaws.com/v1/repos/617069/commitid/39396162666436346439656465313537613561343561626465643931393366623762386265303138/environment/6170692d656e76
* [new branch] HEAD -> master
[mymac:~/Projects/new/foo(master)]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
以下仅仅是 git push 的结果。
[mymac:~/Projects/new/foo(master)]$ git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
To [email protected]:xxxx/foo.git
885cc33..99abfd6 master -> master
另外,我需要一个 before_symlink 部署钩子。我该怎么做?
答案1
从你的问题中无法明确你是否已经尝试过这个git aws.push
选项。你可以参考一篇博客文章在 AWSBlog 上了解如何将基于 Rack 的应用程序部署到 AWS Elastic Beanstalk。总结一下,您可以按照以下简单步骤进行操作:
eb init
eb start
git aws.push
当然,这需要您下载 AWS Elastic Beanstalk 命令行工具。
据我所知,AWS Elastic Beanstalk 尚未与 Git 部署挂钩集成,但如果您已经在使用 Jenkins 等 CI 服务器,那么集成起来就非常简单了。Github 可以很好地与大多数 CI 服务器集成。您可以通过使用自定义 Shell 命令添加新的 Jenkins 作业来实现从 CI 服务器git push
触发git aws.push
。您可能还想在将新构建推送到那里之前执行测试工具。Jenkins 或 Travis CI 将为您完成这项工作!
关于类型任务的执行before_symlink
,AWS Elastic Beanstalk 的工作方式与传统的 Capistrano 部署不同。它将所有代码捆绑到一个可执行存档中,然后简单地将其复制到负载平衡节点。为了执行before_symlink
类似的任务,您可能需要编写一些自定义配置文件并将它们放在.ebextensions
Git 存储库的根路径下。我的做法是添加一个文件。以下是用于在服务器上.ebextensions/symlink.config
符号链接文件的示例代码。database.yml
container_commands:
symlink-db:
command: ln -sf /var/app/shared/database.yml $EB_CONFIG_APP_ONDECK/config/database.yml
请注意,我正在运行一个自定义 AMI,其中包含一个/var/app/shared/
目录,否则,当您启动 vanilla Ruby 容器时,该目录不存在。此外,$EB_CONFIG_APP_ONDECK
环境变量保存当前部署目录名称(通常为),部署完成后,在重新启动 Rails(Passenger)服务器之前,该目录/var/app/ondeck
将移动到该目录,从而可用于处理请求。阅读更多/var/app/current
自定义 AWS Elastic Beanstalk 容器。
希望这可以帮助。
答案2
我能够将 Travis CI 测试构建与 Amazon Beanstalk 部署集成。为了做到这一点,我必须自动化 eb 工具,因为当前版本 2.5.1 仅以交互方式运行,因此我编辑了一些 python 文件上的 EB 工具代码,然后创建了一个 .travis.yml 文件,其中包含将应用程序部署到 AWS Beanstalk 的适当说明。
以下是我的博客的链接,其中完整描述了该过程:
http://www.sysadminops.com/amazon-beanstalk-and-travis-ci-integration/