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

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

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

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

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2291閲覧

Ruby on Rails でユーザーに処理の進度がわかるようにしたい

ya_ma_to

総合スコア12

Ruby

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

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/06/20 04:01

編集2017/06/20 04:02

rials で重い処理をする場合や、apiの都合でdurationを入れる場合に、UIから見たときに今ループの何周目など、putsやprintでコンソールに出しているような情報をリアルタイムで見れるようにしたいです。

どうすれば良いのかよくわからないので、教えていただけると大変助かります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、簡単に実装できる方法はないので、ある程度スキルレベルが必要になります。バックグラウンド処理やajaxに関する知識が必要になるでしょう。

そして、前提として、それだけ重い処理ならバックグラウンド処理にしたほうがいいでしょう。他のユーザーのリクエストが止まる恐れがあるからです。
Active Job使うのが一番簡単だとは思いますが、railsのバージョン次第ではdelayed job使うといいと思います。

次に肝心の進捗表示ですが、

  1. サーバー側は初回のリクエストを受け付けたら、バックグラウンド処理をキック。とりあえずバックグラウンド処理のIDと2.でアクセスするURLを返す。
  2. ブラウザ側は1.のレスポンスを受け取ったらjavascriptで一定時間のtimerで1.で取得したurlにアクセスして進捗を取得、表示する。
  3. もし、進捗が完了していたら完了処理。

といった流れになると思います。ループの回数までとるのは結構大変な実装になるとは思いますが...。
このgemとかは参考になるはずです。

投稿2017/06/20 13:14

h_daido

総合スコア824

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

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

ya_ma_to

2017/06/20 14:41 編集

なるほど 当方まだ開発を初めて日が浅く、実現できるかわかりませんが全体としてのイメージはできました!ある程度取り組んで見て難しそうだったらとりあえずこの実装は後回しにしようかと思います。 丁寧に回答いただきありがとうございます!
ya_ma_to

2017/06/20 14:47

JavaScript で一定時間ごとにajax通信を行うように設定して、一定時間ごとに処理の進捗を示す情報をviewに表示する。 これをバックグラウンドでactive jobなどのgemを利用して行う、という理解で大丈夫でしょうか?
h_daido

2017/06/21 01:22

はい、大筋その通りかと思います! > active jobなどのgemを利用して行う こちらに関しては(サイト規模によりますが)早めに実行しておくのがよいかと思います。時間のかかる処理はバックグラウンドタスクにしておかないと、ユーザー数が増えたときにパフォーマンス問題になりやすいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問