AWS Elastic Beanstalk и всякий раз, когда Gem

У меня есть приложение Rails 4.2.1, использующее Ruby 2.2. Я пытаюсь использовать всякий раз, когда Gem для обновления задач cron на моем Elastic Beanstalk из моей базы кода. Я следил за несколькими ресурсами AWS, где вы можете добавлять файлы в папку .ebextensions и использовать обработчик пост-развертывания EB через файлы оболочки. Вот пара ресурсов:

После статей в блоге я добавил файл ниже, раскомментировал строку gitignore о файлах в папке .ebextensions и развернул приложение. К сожалению, я смог увидеть какие-либо изменения. Я проверил файлы журналов (log/eb-tools.log, log/cron и т. Д.) И обработал все файлы журналов для файла оболочки, который я создаю, когда бы то ни было, и многое другое. Но не повезло.

commands:
  create-post-dir:
  command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
  ignoreErrors: true
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_update_cron.sh"
  mode: "000755"
  owner: root
  group: root
  content: |
    #!/usr/bin/env bash
    # Using similar syntax as the appdeploy pre hooks that is managed by AWS

    # Loading environment data
    EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
    EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
    EB_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user)
    EB_APP_CURRENT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
    EB_APP_PIDS_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_pid_dir)

    # Setting up correct environment and ruby version so that bundle can load all gems
    . $EB_SUPPORT_DIR/envvars
    . $EB_SCRIPT_DIR/use-app-ruby.sh

    # Now we can do the actual restart of the worker. Make sure to have double quotes when using env vars in the command.
    su -c "cd $EB_APP_CURRENT_DIR; bundle exec whenever --update-cron --set='environment=$RACK_ENV'" - $EB_APP_USER

Как я могу убедиться, что этот файл оболочки вызывается? Могу ли я каждый раз тестировать его без нового развертывания? Кроме того, я открыт для других вариантов, если самоцвет «Когда угодно» - не лучший вариант. В основном я хочу иметь возможность управлять своими задачами cron в коде и под контролем версий.

Заранее спасибо!

ОБНОВИТЬ:

  • У меня был тип в папке .ebextensions, из-за чего он не добавлялся. После того, как это было исправлено, я смог читать сообщения об ошибках и создавать cron-скрипт, который обновлял crontab с помощью гема Whe when.

person Evan Johnson    schedule 15.05.2015    source источник
comment
У меня проблема с этой настройкой. При развертывании я продолжаю получать сообщение об ошибке, потому что whenever: command not found. Гем установлен на машине, и я могу запустить whenever, когда вхожу в систему через ssh. Любые идеи?   -  person ferdynator    schedule 26.05.2016


Ответы (1)


Я смог понять это после исправления опечатки в имени моей папки .ebextensions. После этого скрипты были скомпилированы, и стали появляться сообщения журнала. Прочитав сообщения журнала, я придумал следующий сценарий конфигурации (.ebextensions/01_cron.config):

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/01_cron.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      # Using similar syntax as the appdeploy pre hooks that is managed by AWS
      set -xe

      EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
      EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
      EB_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)

      . $EB_SUPPORT_DIR/envvars
      . $EB_SCRIPT_DIR/use-app-ruby.sh

      cd $EB_DEPLOY_DIR
      su -c "bundle exec whenever --update-cron"
      su -c "crontab -l"
person Evan Johnson    schedule 19.05.2015
comment
Спасибо, что отправили ответ. а все строки, упомянутые вами выше, подвергаются сомнению как commands? - person Junaid Farooq; 19.01.2016