2017-02-18 98 views
2

我知道这里有一些关于此的文章,但我试图在Elastic Beanstalk上部署Rails应用程序,并在部署过程中启动delayed_job,但我没有设法得到这个工作呢。部署Rails应用程序与delayed_job作为守护程序任务运行

我试过设置在.ebextensions文件夹中的配置文件:

命令: 创建,-DIR后: 命令: “MKDIR的/ opt/elasticbeanstalk /钩/ appdeploy /后” ignoreErrors :真

文件: “/opt/elasticbeanstalk/hooks/appdeploy/post/restart_delayed_job.sh”: 模式: “000755” 老板:根 组:根 内容:| #!的/ usr/bin中/ env的庆典

# 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,但我相信这解决了获取rails环境设置的相同问题,以便bundle能够运行。

.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 

事情:

  • 使用su -m选项,以保持环境瓦尔。
  • 使用su -s选项为webapp用户指定shell。
  • 守护进程的PID需要被存储在/ var /应用/电流之外,因为这被每个新的部署删除(并因此打破重启守护进程)
相关问题