2017-02-18 10 views
2

Я понимаю, что есть несколько статей об этом, но я пытаюсь развернуть приложение Rails на Elastic Beanstalk и запустить delayed_job в процессе развертывания, но мне не удалось пусть это еще предстоит.Deploy Rails Приложение с задержкой_job работает как задача daemon

Я попытался создать конфигурационный файл в папке .ebextensions:

команды: создать-пост-Dir: команда: "MkDir/Opt/elasticbeanstalk/Крючки/AppDeploy/после" IgnoreErrors : правда

файлы: "/opt/elasticbeanstalk/hooks/appdeploy/post/restart_delayed_job.sh": режим : "000755" владелец: корень группа: корень содержание: | #!/USR/бен/окр Баш

# Loading environment data 
    EB_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user) 
    EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir) 
    EB_APP_PID_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_pid_dir) 
    EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir) 
    EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir) 
    # Export EB_APP_LOG_DIR so we can access it when running bin/delayed_job below, 
    # which accesses config/initializers/delayed_job.rb, which uses EB_APP_LOG_DIR. 
    export EB_APP_LOG_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_log_dir) 

    # Make sure the delayed_job.log exists and is owned by $EB_APP_USER 
    touch $EB_APP_LOG_DIR/delayed_job.log 
    chown $EB_APP_USER:$EB_APP_USER $EB_APP_LOG_DIR/delayed_job.log 

    # 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. 
    # For Rails 4, replace script/delayed_job with bin/delayed_job 
    cd $EB_APP_DEPLOY_DIR 
    su -s /bin/bash -c "bundle exec bin/delayed_job --pid-dir=$EB_APP_PID_DIR restart" $EB_APP_USER 
    su -s /bin/bash -c "bundle exec bin/delayed_job --pid-dir=$EB_APP_PID_DIR status" $EB_APP_USER 

Любая помощь с получением этого работать очень ценится!

+1

любой удачи с этим? –

ответ

1

Проведя много времени на этом, я, наконец, получил его работу со следующим. Хотя это не для delayed_job, я считаю, что это решает ту же проблему, что и настройка среды рельсов, так что пакет будет запущен.

.ebextensions/01_my_server.config

files: 
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_my_servers.sh": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     #!/usr/bin/env bash 
     EB_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user) 
     EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir) 
     EB_APP_PID_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_pid_dir) 
     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_SUPPORT_DIR/envvars 
     . $EB_SCRIPT_DIR/use-app-ruby.sh 

     mkdir -p /home/webapp 
     chown webapp:webapp /home/webapp 
     mkdir -p /home/webapp/pids 
     chown webapp:webapp /home/webapp/pids 

     cd $EB_APP_DEPLOY_DIR 
     su -m -c "bundle exec bin/my_server.rb --pid-dir=/home/webapp/pids restart" -s /bin/bash webapp 

Вещи примечания:

  • Использование Су -m опции, чтобы сохранить окружающую среду вары.
  • Использование опции su -s для указания оболочки для пользователя webapp.
  • Демон PID должен храниться за пределами/вар/приложение/ток, так как это будет удалено с каждым новым Deploy (и, следовательно, ломает перезапуск демона)
Смежные вопросы