嘿,我在AWS Elastic Beanstalk
实例上运行rails应用程序,并且使用Sidekiq进行后台作业遇到了几个问题。我使用Sidekiq发送欢迎和密码重置电子邮件。
应用程序正在运行Rails 4.2.3
。 Elastic Beanstalk实例正在运行64bit Amazon Linux 2015.03 v2.0.1 running Ruby 2.2 (Puma)
。我使用以下tutorial在Elastic Beanstalk上设置Redis
节点和Sidekiq
,并使用以下GIST中的sidekiq.config
放置在我的.ebextentions
内{1}}文件夹。我没有使用GIST中任何其他推荐的配置文件。
一切似乎都没有顺利。应用程序正确部署,任何日志都没有错误。但是,当我创建新用户时,触发欢迎电子邮件,电子邮件无法发送。我检查了Sidekiq
网络应用程序,看来我的工作已安排但从未执行过。在进一步检查时,我确定Sidekiq
实际上并没有运行。我通过SSH连接到EC2实例并手动运行bundle exec sidekiq
并发送电子邮件。
由于某些原因Sidekiq
在部署应用程序时无法运行。
以下是我sidekiq.config
的内容:
# Sidekiq interaction and startup script
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/50_restart_sidekiq":
mode: "000755"
content: |
#!/bin/bash
. /opt/elasticbeanstalk/containerfiles/envvars
PIDFILE=$EB_CONFIG_APP_PIDS/sidekiq.pid
cd $EB_CONFIG_APP_CURRENT
if [ -f $PIDFILE ]
then
SIDEKIQ_LIVES=$(/bin/ps -o pid= -p `cat $PIDFILE`)
if [ -z $SIDEKIQ_LIVES ]
then
rm -rf $PIDFILE
else
kill -TERM `cat $PIDFILE`
sleep 10
rm -rf $PIDFILE
fi
fi
BUNDLE=/usr/local/bin/bundle
SIDEKIQ=/usr/local/bin/sidekiq
$BUNDLE exec $SIDEKIQ \
-e production \
-P /var/app/containerfiles/pids/sidekiq.pid \
-C /var/app/current/config/sidekiq.yml \
-L /var/app/containerfiles/logs/sidekiq.log \
-d
"/opt/elasticbeanstalk/hooks/appdeploy/pre/03_mute_sidekiq":
mode: "000755"
content: |
#!/bin/bash
. /opt/elasticbeanstalk/containerfiles/envvars
PIDFILE=$EB_CONFIG_APP_PIDS/sidekiq.pid
if [ -f $PIDFILE ]
then
SIDEKIQ_LIVES=$(/bin/ps -o pid= -p `cat $PIDFILE`)
if [ -z $SIDEKIQ_LIVES ]
then
rm -rf $PIDFILE
else
kill -USR1 `cat $PIDFILE`
sleep 10
fi
fi
我错过了什么?我需要将其他文件添加到.ebextentions
文件夹吗?为什么没有Sidekiq
被启动?