4

我有一個Rails 4.2.1應用程序,使用Ruby 2.2。我試圖使用Whenever Gem來從我的代碼庫更新Elastic Beanstalk上的cron任務。我遵循AWS的幾個資源,您可以將文件添加到.ebextensions文件夾中,並通過shell文件使用EB的post部署掛鉤。這裏有幾個資源:AWS Elastic Beanstalk和每當寶石

繼博客文章中,我添加的文件下面,註釋掉關於在.ebextensions文件夾中的文件gitignore行,部署我的應用。 Unfortunatley,我已經能夠看到任何變化。我已經檢查了日誌文件(log/eb-tools.loglog/cron等),併爲我創建的shell文件的所有日誌文件進行了grep,每當,等等。雖然沒有運氣。

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 

我怎樣才能確保這個shell文件被調用?我可以在沒有每次新部署的情況下測試它嗎?此外,如果寶石不是最佳選擇,我可以接受其他選擇。我主要希望能夠在代碼和版本控制下管理我的cron任務。

提前致謝!

UPDATE:

  • 我不得不對.ebextensions文件夾,這是導致它不能添加一個類型。在修復之後,我能夠讀取錯誤消息,並創建一個使用Whenever gem更新crontab的cron腳本。
+0

我遇到這種設置的問題。在部署中,我一直收到錯誤,因爲'when:command not found'。寶石安裝在機器上,當我通過ssh登錄時,我可以運行'when'。有任何想法嗎? – ferdynator

回答

6

在修復我的.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" 
+0

感謝您發佈答案。但是你上面提到的所有行都是'commands'? –