Closed kitagawachihiro closed 1 year ago
◾️本番環境(fly.io)でcronを実行する方法
①crontabファイル(cronの設定ファイル)をアプリ直下に作成
touch ./crontab
中に設定を記述する
0 0 * * * bundle exec rake delete:delete
②デプロイする
fly deploy
③cronのインスタンスを減らす deployを実行すると cronのインスタンスも冗長構成で2つ上がってきてしまうため、1つにする必要がある
※インスタンス数の確認
user@USERnoMacBook-Air spoTodo % fly scale show
VM Resources for app: spotodo
Groups
NAME COUNT KIND CPUS MEMORY REGIONS
cron 2 shared 1 256 MB nrt(2)
web 2 shared 1 256 MB nrt(2)
cronは1つ、webは2つに変更
fly scale count 1 --process-group cron
参考)公式 https://fly.io/docs/app-guides/supercronic/
参考)まとまっていてすごいわかりやすい https://qiita.com/solt9029/items/bd6a9bae247f74f3e3a2
初めは下記でインスタンス数を減らそうとしたが、エラーがでていた
fly scale count 1 web 2 --app spotodo
や
fly scale count 1 web 2 --process-group spotodo-db
エラー内容
Error: --process-group flag is required when no group named 'app' is defined
「app」という名前のグループが定義されていない場合は、--process-group フラグが必要です
fly.tomlではapp="spotodo"と定義されているので?であったが。。。
実行コマンドを変更することで解決。
fly scale count 1 --process-group cron
--process-groupはプロセスを指定できるオプション。 今回cronプロセスだけスケールの変更をすれば良かったのでcronを指定した。
user@USERnoMacBook-Air spoTodo % fly scale count 1 --process-group cron
App 'spotodo' is going to be scaled according to this plan:
-1 machines for group 'cron' on region 'nrt' of size 'shared-cpu-1x'
? Scale app spotodo? Yes
Executing scale plan
Destroyed 5683d444a62278 group:cron region:nrt size:shared-cpu-1x
user@USERnoMacBook-Air spoTodo % fly scale show
VM Resources for app: spotodo
Groups
NAME COUNT KIND CPUS MEMORY REGIONS
cron 1 shared 1 256 MB nrt
web 2 shared 1 256 MB nrt(2)
user@USERnoMacBook-Air spoTodo % fly postgres connect -a spotodo-db
Connecting to fdaa:2:e152:a7b:fc:ad5c:ea93:2... complete
psql (15.3 (Debian 15.3-1.pgdg120+1))
Type "help" for help.
postgres=# \c spotodo
You are now connected to database "spotodo" as user "postgres".
spotodo=# \dt
List of relations
Schema | Name | Type | Owner
--------+----------------------+-------+---------
public | ar_internal_metadata | table | spotodo
public | authentications | table | spotodo
public | currentlocations | table | spotodo
public | schema_migrations | table | spotodo
public | spots | table | spotodo
public | todos | table | spotodo
public | users | table | spotodo
(7 rows)
spotodo=# select * from todos;
rake aborted!
Don't know how to build task 'delete' (See the list of available tasks with rake --tasks
)
/rails/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>
flyのログでエラー
flyctlをアップデートすることで解決
参考)アップデートコマンド https://github.com/superfly/flyctl#using-a-package-manager