たくさんのタスクを含むアプリケーションがあり、データベース内のタスクごとにDayTaskを作成するcronジョブを毎日実行したいと考えています。タスクhas_manyDayTasksとこれらのdaytasksは、ユーザーが毎日チェックするものです。私はeverythinggemを使用していますが、まったく実行されていないようです。何か案は?
config/schedule.rb
every 1.day, :at => "12:01am" do
runner "Task.generate_tasks_for_day"
end
Task.rb
def generate_tasks_for_day
Task.all.each do |task|
task.day_tasks.create(:target_date => Date.today)
end
end
'wheneverコマンド'を実行した結果
1 0 * * * /bin/bash -l -c 'cd /home/grant/Rails_projects/GoalTwist && script/Rails runner -e production '\''Task.generate_tasks_for_day'\'''
注:テスト実行するたびに、config /schedule.rbの時刻を変更しています。
最後に、いつでもgemを実行する方法を解決しました。これは本番環境ではうまく機能しますが、開発モードでは機能しません(開発モードでうまく機能するには、いくつかのトリックを実行する必要があると思います)。
次に、実行するプロセスは次のとおりです。
scheduler.rb
ファイルを作成しますssh
を使用)whenever
whenever --update-crontab
Sudo service cron restart
crontab -l
それでおしまい!
個人的には、サーバーから直接cronを設定することを好みます。
crontab -e
0 5 * * * /bin/bash -l -c 'cd /path_to_my_app/current && Rails_ENV=production bundle exec rake my_cron_rake'
crontab -l
以下を実行して、実際にジョブをcrontabに登録する必要があります。
whenever --update-crontab
また、ローカルでジョブを実行しようとしている場合は、タスクに:environment => "development"
を追加してください
runner "MyTask.some_action", :environment => "development"
生成されたコマンドをターミナルから直接実行するか、次の行を追加してみてください[email protected]
crontabに。
whenever
コマンドで-bash: whenever: command not found
が得られる場合は、bundle exec whenever
を試してください。