ruby-on-rails - 每当 Gem AWS Elastic Beanstalk

标签 ruby-on-rails amazon-web-services whenever

如果这是重复的,我们深表歉意 - 有一些结果具有类似的问题,但大多数答案都相当过时,我无法使其正常工作。

我正在使用每当 gem 在我的 Rails 应用程序中每小时运行一个任务,但我似乎无法让 AWS 正确配置 Cron 设置。

我的第一个想法是通过 SSH 进入实例并运行每当更新/写入命令,该命令运行良好,但我的任务没有运行。

在回顾了这里的旧问题后,我创建了一个 ebextensions 文件夹,其中包含一个配置文件来运行更新命令,但仍然没有乐趣。我使用了这个配置脚本,但不太理解它,所以我认为我没有正确设置它 - 有人可以帮忙吗?

files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_update_cron.sh"
mode: "000755"
owner: root
group: root
content: |
#! /usr/bin/env bash
. /opt/elasticbeanstalk/containerfiles/envvars
su -c "cd $EB_CONFIG_APP_CURRENT; bundle exec whenever --update-cron" 
- $EB_CONFIG_APP_USER

编辑添加的日志

2018-01-09T23:24:45.282Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AppDeployStage1/AppDeployPostHook] : Starting activity...
[2018-01-09T23:24:45.282Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AppDeployStage1/AppDeployPostHook/01_cron.sh] : Starting 
activity...
[2018-01-09T23:24:46.618Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AppDeployStage1/AppDeployPostHook/01_cron.sh] : Completed 
activity. Result:
[write] crontab file updated
[2018-01-09T23:24:46.618Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AppDeployStage1/AppDeployPostHook] : Completed activity. 
Result:
Successfully execute hooks in directory 
/opt/elasticbeanstalk/hooks/appdeploy/post.
[2018-01-09T23:24:46.618Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AppDeployStage1] : Completed activity. Result:
Application version switch - Command CMD-AppDeploy stage 1 completed
[2018-01-09T23:24:46.618Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AddonsAfter] : Starting activity...
[2018-01-09T23:24:46.618Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AddonsAfter/ConfigLogRotation] : Starting activity...
[2018-01-09T23:24:46.618Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AddonsAfter/ConfigLogRotation/10-config.sh] : Starting 
activity...
[2018-01-09T23:24:46.778Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AddonsAfter/ConfigLogRotation/10-config.sh] : Completed 
activity. Result:
Disabled forced hourly log rotation.
[2018-01-09T23:24:46.779Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AddonsAfter/ConfigLogRotation] : Completed activity. 
Result:
Successfully execute hooks in directory 
/opt/elasticbeanstalk/addons/logpublish/hooks/config.
[2018-01-09T23:24:46.779Z] INFO  [1641]  - [Application update app-5c64-
180109_162309@15/AddonsAfter] : Completed activity.
[2018-01-09T23:24:46.779Z] INFO  [1641]  - [Application update app-5c64-

编辑2我的新配置代码现在形成以下错误:

commands:
 70.1-create-post-dir:
  # "mkdir -p" ignores error if directory already exists
  command: "mkdir -p /opt/elasticbeanstalk/hooks/appdeploy/post"

files:
 "/opt/elasticbeanstalk/hooks/appdeploy/post/01_cron.sh":
 mode: "000755"
 owner: root
 group: root
 content: |
  #!/usr/bin/env bash

  # Load 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_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
  # Export EB_APP_LOG_DIR so we can access it when running "whenever" below,
  # which accesses config/schedule.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 cron-whenever.log exists and is owned by $EB_APP_USER
  touch $EB_APP_LOG_DIR/cron-whenever.log
  chown $EB_APP_USER:$EB_APP_USER $EB_APP_LOG_DIR/cron-whenever.log

  # cron requires a home directory.  Make sure it exists and is owned by $EB_APP_USER.
  mkdir -p /home/$EB_APP_USER
  chown $EB_APP_USER:$EB_APP_USER /home/$EB_APP_USER

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

  # Run the whenever --update command to update the cron job for $EB_APP_USER.
  cd $EB_APP_DEPLOY_DIR
  whenever --update -u $EB_APP_USER

  # After setup, you can run "crontab -l -u webapp" to check the configuration.

最佳答案

首先 - 您的 .config 文件就是这样格式化的吗?该文件采用 YAML 格式,因此空格/缩进很重要。另外,您能否确认该文件的名称和位置?应该看起来像这样:

.ebextensions/01-whenever.config

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_update_cron.sh"
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      . /opt/elasticbeanstalk/containerfiles/envvars
      su -c "cd $EB_CONFIG_APP_CURRENT; bundle exec whenever --update-cron" - $EB_CONFIG_APP_USER

如果这不能解决问题,请检查并确保通过 eb 连接正确创建文件 /opt/elasticbeanstalk/hooks/appdeploy/post/99_update_cron.sh ssh

然后,检查 /var/log/eb-activity.log 处的日志文件,并查找正在执行 99_update_cron.sh Hook 的部分。可能会有一些信息性错误消息。

关于ruby-on-rails - 每当 Gem AWS Elastic Beanstalk ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48162051/

相关文章:

ruby-on-rails - 使用 Rails 从 IP 存储 session 地理定位结果的最佳方法是什么?

amazon-web-services - 亚马逊 aws Auto Scaling 组实例名称标签

amazon-web-services - CloudWatch Logs 代理的到期日期是多少?

ruby-on-rails - 使用本地 redis 但不使用远程的 Sidekiq 处理

ruby-on-rails - Rails 3 - 授权,为分层计划设置限制?

ruby-on-rails - Globalize3 多区域设置形式

ruby-on-rails - 使用 Ruby 删除 URL 的一部分

rest - 使用正确的 ACL 通过 VPC 端点通过 HTTP 将对象放入 AWS S3?

ruby-on-rails - Rails 的 "delayed_job"真的用于 cron 任务吗?

ruby-on-rails - "Whenever"gem 在 Heroku 上运行 cron 作业