pfaffman
(Jay Pfaffman)
1
そこで、Ansible を起動して Discourse のインストールを行うプラグインを作成しました(WordPress を使って インストール注文 を受注するのは、本当にやめたいのです!)。
当初は fork を呼び出して起動していましたが、テストでは問題なく動作しました。しかし、より「Discourse らしい方法」で行うべきだと考えました。
そこで、プロセスを実行するワンオフジョブを作成しましたが、以下のように終了されてしまいます。
E, [2020-12-16T12:53:39.662683 #3158277] ERROR -- : worker=0 PID:3158425 timeout (61s > 60s), killing
クラスに sidekiq_options queue: 'low' を追加し、さらにジョブを実行する関数にも追加してみました。
その後、ジョブでプロセスを実行するのではなく、モデル内で直接実行するように変更しました。
Discourse::Utils.execute_command(*instructions)
rails c から実行すれば問題なく動作しますが、Ubuntu 開発環境(./bin/unicorn で起動)でどのように実行しても、終了されてしまいます。
「いいね!」 1
Falco
(Falco)
2
ワンショットジョブは、文字通り一度だけ実行されるジョブです。あなたが必要なのは、リクエストがコントローラーに到達するなど、トリガーによってスケジュールされる通常ジョブのようです。
通常ジョブは、通常の使用状況で一部が60秒を超える場合があるため、60秒以上実行される可能性があります。
「いいね!」 1
pfaffman
(Jay Pfaffman)
3
さて、通常のジョブに変更し、./bin/unicorn の代わりに ./bin/rails s で実行してみましたが、依然として解決しませんでした。
これは理にかなっていません。多くのジョブが1分以上かかることはよく知っているからです。
Falco
(Falco)
4
ジョブは具体的にどのように実行していますか?関連する Ruby コードの一部を貼り付けていただけますか?
Falco
(Falco)
6
「いいね!」 2
pfaffman
(Jay Pfaffman)
7
だから質問しなければならないのです!私は単なる原始人だからです。(洞窟に住んでいる方々に失礼な意図はありません。)
もちろん、理由はありません。ただ、どう呼び出せばよいのかがわからなかったのです!
本当にありがとうございます!
…そして、まだ実行中です!…
本当にありがとうございます。これだけでも数時間かかりました…
次のステップ:実際の本番サーバーで実行すること…
「いいね!」 4