Я могу войти в консоль с одного из модулей (на kubernetes) и выполнить эту команду:
RAILS_ENV=production bin/delayed_job start
Задания выполняются правильно, делая это. Однако, когда модули удаляются или перезапускаются, задания перестают выполняться.
Я также попытался добавить указанную выше команду в файл инициализатора (например, 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
, но задания не выполняются.
Есть идеи, как правильно запустить delayed_jobs в kubernetes?
РЕДАКТИРОВАТЬ: Вот мой 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"
#########################################################