【发布时间】:2019-02-04 19:48:09
【问题描述】:
我可以从其中一个 pod(在 kubernetes 上)登录控制台并运行以下命令:
RAILS_ENV=production bin/delayed_job start
作业运行正常。但是,当 pod 被删除或重新启动时,作业将停止运行。
我还尝试在初始化文件(例如 config/initializers/delayed_jobs_runner.rb)中添加上述命令,但在启动应用程序时出现递归循环。
我尝试做的另一件事是创建一个名为 my-jobs.yaml 的新文件
apiVersion: batch/v1
kind: Job
metadata:
name: job
spec:
template:
spec:
containers:
- name: job
image: gcr.io/test-app-123/somename:latest
command: ["/bin/bash", "-l", "-c"]
args: ["RAILS_ENV=production bundle exec rake jobs:work"]
restartPolicy: Never
backoffLimit: 4
然后我执行kubectl apply -f my-jobs.yaml,但作业没有运行。
知道如何在 kubernetes 中正确运行 delay_jobs 吗?
编辑:这是我的 Dockerfile:
FROM gcr.io/google_appengine/ruby
# Install 2.5.1 if not already preinstalled by the base image
RUN cd /rbenv/plugins/ruby-build && \
git pull && \
rbenv install -s 2.5.1 && \
rbenv global 2.5.1 && \
gem install -q --no-rdoc --no-ri bundler
# --version 1.11.2
ENV RBENV_VERSION 2.5.1
# Copy the application files.
COPY . /app/
# Install required gems.
RUN bundle install --deployment && rbenv rehash
# Set environment variables.
ENV RACK_ENV=production \
RAILS_ENV=production \
RAILS_SERVE_STATIC_FILES=true
# Run asset pipeline.
RUN bundle exec rake assets:precompile
CMD ["setup.sh"]
# Reset entrypoint to override base image.
ENTRYPOINT ["/bin/bash"]
################### setup.sh ############################
cd /app && RAILS_ENV=production bundle exec script/delayed_job -n 2 start
bundle exec foreman start --formation "$FORMATION"
#########################################################
【问题讨论】:
-
这更像是一个建议,您是否尝试过查看此gem。它提供了专门运行作业、任务等的方法。
-
您的工作失败或根本没有开始?您的日志/事件显示什么?
-
Nicola,工作开始很好。只是每次在 kubernetes 上创建/删除/重新创建新的 Pod 时,我都必须手动启动 delay_jobs 脚本。我必须登录到其中一个 pod 的 shell 并在控制台中运行“RAILS_ENV=production bin/delayed_job start”。有没有办法自动做到这一点?
-
tekuri,我用上面的 my-jobs.yaml 试过了,但不幸的是工作没有开始。
标签: ruby-on-rails kubernetes delayed-job