gpt4 book ai didi

ruby-on-rails - 如何在 Kubernetes 中运行delayed_jobs?

转载 作者:行者123 更新时间:2023-12-02 19:23:05 26 4
gpt4 key购买 nike

我可以从其中一个 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 中正确运行delayed_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"
#########################################################

最佳答案

在一个 Docker 容器中运行多个进程是有问题的,因为您无法轻松观察特定进程的生命周期 - 每个容器都需要一个“主”进程,当它退出时,容器也会退出。

在 Github ( https://github.com/collectiveidea/delayed_job#user-content-running-jobs ) 上查看时,我强烈建议稍微更改一下您的启动命令以在前台运行它,因为现在当您使用守护进程启动 Kubernetes 作业时 - 作业立即结束,因为 docker 容器生命周期与“主”前台进程生命周期直接相关,因此当您仅运行后台进程时,您的主进程和容器也会立即退出。

将命令更改为:

RAILS_ENV=production script/delayed_job run

如何在前台启动工作线程,这样你的 Kubernetes 作业就不会退出。另请注意,Kubernetes 作业并不适合此类不定式任务(作业应该有开始和结束),因此我建议使用 ReplicaSet为此

关于ruby-on-rails - 如何在 Kubernetes 中运行delayed_jobs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52087310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com