0

У меня есть приложение для рельсов, которое использует спасение. Приложение развернуто с использованием эластичного бобового стека (64-битный Amazon Linux 2015.09 v2.0.6 под управлением Ruby 2.1 (Passenger Standalone)), и я пытаюсь использовать monit для запуска спасения. После некоторых исследований, как представляется, путь к успеху. Однако похоже, что файл игнорируется. Я не вижу файл (/ var/app/current/tmp/success), который я отправлял для отладки написанных вещей, monit не установлен и файл конфигурации monit не создается.файл .ebextensions игнорируется при попытке выполнить спасение через эластичный beanstalk

 
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

You'res довольно близко - я использую очень похожую структуру успешно. (Я думаю, мы оба начали с того же блога ...) Несколько комментариев:

Ваш test_command не производит нужных результатов, потому что файл success перезаписывается. Per the documentation:

Вы можете использовать клавишу команд для выполнения команд в экземпляре EC2. Команды обрабатываются в алфавитном порядке по имени, и они запускаются до того, как приложение и веб-сервер настроены, и файл версии приложения извлечен.

Что происходит, что 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: 

Наконец, я должен был сказать Monit, чтобы Явно запускать и останавливать Resque при каждом развертывании по добавление следующего к разделу files:

"/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