質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1242閲覧

Railsで任意の時刻にコマンドを実行したい

kinmugi87

総合スコア12

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/01/27 07:41

やりたいこと

RailsとTwitter Streaming APIを使って以下のようなシステムを作ろうと思っております。

  • Railsで作成した管理画面から、運用担当者が「プロジェクト」と呼ばれる投稿をいくつも登録する
  • プロジェクトには「キーワード」と「期間」の項目がある
  • 登録されているプロジェクトの期間に入ったらTwitter Streaming APIを使って、キーワードが含まれるツイートを収集、DBに入れていく
  • 複数のプロジェクトで期間が重なる場合もありえる

やったこと

http://snippets.feb19.jp/?p=1747
こちらの記事を参考に、Twitter Streaming APIを使ってツイートを取得することは問題なくできました。

ツイートを取得するごとにDBに保存する、というのも問題なくできると思います。

聞きたいこと

上記の記事では bundle exec ruby stream.rb というコマンドを実行することでツイートの取得が始まりますが、Railsで、「任意の時刻になったら任意のコマンドを実行する(&任意の時刻になったらそのコマンドを終了する)」ということはできるのでしょうか。

Railsで単純なCRUDアプリはいくつか作りましたが、今回はいまいちどういう構造にすれば実現できるかがわからなくて困っています。
考え方のヒントだけでも教えていただけたらと思います。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。
少し時間があいてしまいましたが、BAを頂きました回答のコメント

kinmugi87 2018/01/31 01:06

 
回答いただきありがとうございます。

いただいた回答を参考に実装を始めてみました。
rakeタスクとしてツイートを収集するタスクは作成することはできましたが、cronを設定するところでまた躓いてしまいました。

Web上の管理画面から担当者がプロジェクトを作成した時点で、動的にcronを設定することはできるのでしょうか。
この場合で言えば、プロジェクトに与えられた収集期間の開始時刻に1回だけ走る処理を、プロジェクト作成時に動的に設定するということです。
wheneverについて調べてみても、予め決まった定期的なバッチ処理のスケジュールを設定するものという印象を受けました。

もしよろしければまたご教授いただけると幸いです。

に、こちらから回答させて頂きます。

ただし、**これを使えばできるのでは?**というアイディアレベルの回答になります。

コメントを拝読したところ、実現したいことは

 WEBの管理画面上から何らかのプロジェクトについての編集操作をして、
それを確定したときに、編集画面から入力または選択された、
何らかのタスクやコマンドを指定の時刻に実行するように、
crontab が変更されるようにしたい。

ということと解釈しました。
このようなものを作ったことはないのですが、これを使えば実現できるのでは?と
思うところがありまして、それは何かといえば、
crontab コマンドが crontab -e で編集するだけではなく、

crontab <設定ファイル名>

という形式で、以下のように、設定を記述したファイルを指定してスケジュールを更新できることです。

cronの設定方法/設定ファイルの読み込み hikoukiさん@Qiita

ですので、 WEBの画面で、定時起動させたいジョブやコマンドの編集を行うと、
それに応じて、どこかに crontab 形式の一時的なテキストファイル
(たとえば/tmp/cron.conf とします)が作られるようにして、編集が確定されたとき、
すなわち管理画面を Railsで作るのであれば、編集確定アクションの中で、

ruby

1%x(crontab /tmp/cron.conf)

または、適切なユーザー hogeuser を指定して

ruby

1%x(crontab -u hogeuser /tmp/cron.conf)

とすれば、編集内容を cron に反映することができるのではないかと考えています。

思いつきですが、参考になれば幸いです。

投稿2018/02/03 16:40

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんにちは。

他にも解決方法はあるかもしれませんが、以下は、「私ならこうすることを考える」という回答です。

(1) 定時に実行したい処理を、rakeタスクとして作成する。

(2) 上記にて作成した rake タスクを定時に起動するために、whenever gem を使う。

以下、参考記事です。

上記で、wheneverはRailsからcronの設定を行うものですが、cronを使ったことがなければ、コマンドを定時に起動するための基本だと思いますので、先に cron を調べるとよいでしょう。

以上参考になれば幸いです。

投稿2018/01/27 09:49

編集2018/01/27 11:29
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kinmugi87

2018/01/30 16:06

回答いただきありがとうございます。 いただいた回答を参考に実装を始めてみました。 rakeタスクとしてツイートを収集するタスクは作成することはできましたが、cronを設定するところでまた躓いてしまいました。 Web上の管理画面から担当者がプロジェクトを作成した時点で、動的にcronを設定することはできるのでしょうか。 この場合で言えば、プロジェクトに与えられた収集期間の開始時刻に1回だけ走る処理を、プロジェクト作成時に動的に設定するということです。 wheneverについて調べてみても、予め決まった定期的なバッチ処理のスケジュールを設定するものという印象を受けました。 もしよろしければまたご教授いただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問