Ich habe versucht, "wann immer" zu verwenden, auf dem Rails regelmäßig ausgeführt wird, aber ich habe mich für Docker entschieden, da es schwierig war, Umgebungsvariablen und Berechtigungen zu verwalten, wenn es direkt auf dem Mac implementiert wurde.
Die Ausführungsumgebung ist wie folgt ・ Ruby 2.6.3 ・ Schienen 5.2.4 · MySQL 8.0.19
Dockfile
, docker-compose.yml
sieht so aus
Es unterscheidet sich nicht wesentlich von den normalen Docker-Einstellungen, aber da wir sie immer verwenden, haben wir die Einstellungen für die Installation von "corn" und das Ausführen von cron im Vordergrund hinzugefügt.
FROM ruby:2.6.3
#Ruby-Versionsspezifikation
#Edelsteininstallation
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
#Cron-Installation
RUN apt-get install -y cron
RUN mkdir /my_app
WORKDIR /my_app
COPY Gemfile /my_app/Gemfile
COPY Gemfile.lock /my_app/Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /my_app
#Schreiben Sie crontab mit wann immer
RUN bundle exec whenever --update-crontab
#Führen Sie cron im Vordergrund aus
CMD ["cron", "-f"]
docker-compose.yml
version: '2'
services:
db:
image: mysql:8.0.19
command:
--default-authentication-plugin=mysql_native_password
volumes:
- ./mysql-confd:/etc/mysql/conf.d
- mysql-data:/var/lib/mysql #Für die Datenpersistenz
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 1
# MYSQL_DATABASE: app_development
MYSQL_USER: root
# MYSQL_PASSWORD: password
TZ: Asia/Tokyo
app:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/my_app
- bundle:/usr/local/bundle
ports:
- "3000:3000"
links:
- db
volumes:
mysql-data:
bundle: #Sie müssen nach der Bundle-Installation nicht neu erstellen
config/schedule.rb
#Schienen, weil Sie Schienen immer starten müssen.Verwenden Sie root
require File.expand_path(File.dirname(__FILE__) + "/environment")
#Es macht die Umgebungsvariablen gut
ENV.each { |k, v| env(k, v) }
#Datei zum Schreiben von Protokollen
set :output, error: 'log/crontab_error.log', standard: 'log/crontab.log'
set :environment, :development
#Alle 2 Minuten`sample_task`von`scheduled_task`Laufen
every 2.minutes do
rake 'sample_task:scheduled_task'
# runner "Test.yakisoba", :environment => :development #Läufer Beispiel
end
/lib/tasks/sample_task.rb
namespace :sample_task
desc "scheduled_task"
task scheduled_task: :environment do
.....Funktion, die Sie ausführen möchten
end
end
end
Recommended Posts