尝试通过弹性beanstalk运行rescue时忽略.ebextensions文件

时间:2016-01-18 05:58:27

标签: ruby-on-rails elastic-beanstalk amazon-elastic-beanstalk

我有一个使用救援的rails应用程序。该应用程序使用弹性beanstalk(运行Ruby 2.1(乘客独立)的64位Amazon Linux 2015.09 v2.0.6)部署,我正在尝试使用monit来运行救援。经过一些研究.ebextensions似乎是要走的路。但是看起来好像文件被忽略了。我没有看到我调试正在编写的东西的文件(/ var / app / current / tmp / success),没有安装monit并且没有创建monit配置文件。

myapp
  .ebextensions
     99run.config

以下是99run.config

的内容
packages:
  yum:
    monit: []

files:
  "/etc/monit.d/resque_worker":
    mode: "000644"
    owner: root
    group: root
    content: |
      check process resque_worker_QUEUE
        with pidfile /var/app/current/tmp/resque_worker_QUEUE.pid
        start program = "/bin/sh -l -c 'cd /var/app/current; nohup rake environment resque:work QUEUE=* VERBOSE=1 PIDFILE=/var/app/current/tmp/resque_worker_QUEUE.pid >> /var/app/current/log/resque_worker_QUEUE.log 2>&1'" as uid webapp and gid webapp
        stop program = "/bin/sh -c 'cd /var/app/current && kill -9 $(cat /var/app/current/tmp/resque_worker_QUEUE.pid) && rm -f /var/app/current/tmp/resque_worker_QUEUE.pid; exit 0;'"
        if totalmem is greater than 300 MB for 10 cycles then restart  # eating up memory?
        group resque_workers

commands:
  test_command:
    command: echo "ebextensions ran" > /var/app/current/tmp/success


service:
  sysvinit:
    monit:
      ensureRunning: true
      enabled: true

1 个答案:

答案 0 :(得分:1)

你非常接近 - 我成功地使用了一个非常相似的结构。 (我想我们都是从同一个博客文章开始的......)但有几条评论:

由于test_command文件被覆盖,您的success未产生您想要的结果。每the documentation

  

您可以使用命令键在EC2实例上执行命令。这些命令按名称按字母顺序处理,并在设置应用程序和Web服务器并提取应用程序版本文件之前运行。

当您的应用程序部署到success时,/var/app/current/tmp正在写入/var/app/ondeck。稍后,系统会删除/var/app/current并将/var/app/ondeck重命名为/var/app/current,从而删除success文件。

接下来,这个区块中有一个拼写错误:

service:
  sysvinit:
    monit:

应改为services

services:
  sysvinit:
    monit:

最后,我必须通过将以下内容添加到files部分来告诉monit在每次部署期间明确地启动和停止resque:

"/opt/elasticbeanstalk/hooks/appdeploy/post/98_start_resque.sh":
  mode: "000755"
  owner: root
  group: root
  content: |
    #!/usr/bin/env bash

    su -s /bin/bash -c "monit start resque_worker_QUEUE"

以及以下commands

commands:
  01_remove_worker_bak:
    command: "rm /etc/monit.d/resque_worker_QUEUE.bak"
    ignoreErrors: true
  02_stop_worker:
    command: "monit stop resque_worker_QUEUE"
    ignoreErrors: true