2

我正在将 Rails 应用程序移至 AWS 并使用 EB。我需要在一个单独的实例上运行一个守护进程(我不希望这个实例为 HTTP 请求提供服务)。

守护程序是应用程序代码库的一部分,将与与 Web 服务器实例相同的 RDS 实例进行通信。如果可能的话,我想知道如何配置 EB 以将 rails 应用程序部署到其他实例,但不考虑将该实例添加到负载均衡器,并在新修订后(重新)启动该实例上的守护程序是部署。

我意识到我可以通过自己在 EB 之外管理这个额外的实例来实现相同的结果,但我觉得有更好的方法。我自己做了一些研究,但没有找到我想要的东西。

我也可以只在其中一个 Web 服务器实例上运行守护程序,并接受它也服务 HTTP 请求的事实。由于目前这是可以接受的,这就是我今天正在做的事情......但我想要一个用于该守护进程的专用实例,如果我不必为此放弃 EB 部署的便利性,那就太好了。

这是我第一次使用 Elastic Beanstalk;我对 AWS 有一些经验。我希望我的问题是有道理的。如果不是,那么将接受指出为什么它没有意义的答案。

谢谢!

4

2 回答 2

1

在大多数情况下,虽然不是直截了当,但您可以提供一个.config文件.ebextensions来运行您的脚本文件。

这个加速部署的例子展示了运行一些脚本和来回移动数据。更好的是,作者描述了序列和部署过程。

我刚刚开始进行这种类型的容器定制。我读过其他人在/opt/elasticbeanstalk/hooks/appdeploy/preand/opt/elasticbeanstalk/hooks/appdeploy/post目录中删除文件,其中大部分可以通过阅读上面链接的帖子得出。

另请注意,您可以content在 yaml.config文件中包含脚本,例如我昨天发现的:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      . /opt/elasticbeanstalk/support/envvars
      cd $EB_CONFIG_APP_CURRENT
      su -c "RAILS_ENV=production script/delayed_job --pid-dir=$EB_CONFIG_APP_SUPPORT/pids restart" $EB_CONFIG_APP_USER
于 2013-08-14T14:44:18.377 回答
0

对于 Elastic Beanstalk,这通常是通过在同一 EB 应用程序中使用工作.eb*层环境来实现的(相同的代码库、相同的文件,只是不同的环境。

下面是一个部署到一个Web 服务器和两个专业工作者的 rails 应用程序示例:

[yacin@mac my_rails_app (master)]$ eb list -v
Region: us-west-1
Application: my_rails_app
    Environments: 3
        email-workers-production : ['i-xxxxxxx']
        * web-servers-production : ['i-xxxxxx']
        job1-workers-production : ['i-xxxxxxx', 'i-xxxxxx']

工作人员没有公共 HTTP 接口,并且从与前端共享的队列中提取作业。工作人员可以配置为访问相同的数据库并具有负载平衡和自动缩放功能。

这是一种非常灵活且可扩展的方法,但需要进行一些设置工作。这里有一些关于该主题的资源:Amazon Worker Tier 视频教程Elastic Beanstalk

于 2015-09-25T17:33:43.207 回答