X



Webサイト制作初心者用質問スレ part249
■ このスレッドは過去ログ倉庫に格納されています
0001Name_Not_Found
垢版 |
2018/06/16(土) 19:14:23.20ID:???
初心者だろうが誰だろうが、
まず >>>■ 検索してから ■<<< 質問すること
ネタ・煽り・自演・荒らしは完全放置

【質問時の注意】
  1. 質問する前に >>2 にも目を通すこと
  2. メール欄に何も入れないことを推奨 (IDを出して騙りを防止するため)
  3. 質問者が返信する際は「最初に質問したレス番号」を名前欄に入れること
  4. ブログについてはブログ板で質問すること
     ●ブログ板 http://mevius.5ch.net/blog/
  5. SEO、アドセンス、検索サイトに登録しても検索結果に引っかからないといったことは SEO関連スレで質問すること
     http://find.5ch.net/search?q=seo
  6. アクセス解析については該当スレで質問すること
     http://find.5ch.net/search?q=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A7%A3%E6%9E%90
  7. 製作ソフト(Dreamweaver DW、ホームページビルダー、等)を使用した場合の質問は該当スレで質問すること
  8. CGI、PHP, Perl, Ruby 等のプログラミング関連や CMS, Wiki は Webprog板、またはこの板の該当スレで質問すること
     ●WEBプログラミング板 http://medaka.5ch.net/php/
  9. JavaScript はこの板の該当スレで質問すること
 10. 画像作成ソフト(Photoshop 、Illustrator、等)については該当スレで質問すること
 11. HTML, CSS, CGI, 制作ソフトなどのどんな本を買えばいい?といったことは書籍についての質問スレで質問すること
     http://find.5ch.net/search?q=%E5%BD%B9%E3%81%AB%E7%AB%8B%E3%81%A4%E6%9B%B8%E7%B1%8D%E3%81%AF
 12. 質問内容を吟味して、正しい日本語で第三者が読んでも分かるように質問を書くこと
 13. 間違った回答をする人もいることに注意

【前スレ】
Webサイト制作初心者用質問スレ part248
http://mevius.5ch.net/test/read.cgi/hp/1494150188/
0662Name_Not_Found
垢版 |
2018/10/18(木) 04:45:14.02ID:ITytS7rU
VScodeで、
HTMLタグにカーソルを重ねるとタグの説明がポップアップするのを止めるには、
どこの設定を変えればいいのでしょうか?
自分でも探しているのですが、見つけられないのです
0663Name_Not_Found
垢版 |
2018/10/18(木) 19:34:47.55ID:???
https://dotup.org/uploda/dotup.org1670152.png
https://dotup.org/uploda/dotup.org1670155.png
https://dotup.org/uploda/dotup.org1670156.png

初心者ですお知恵をお貸し願えませんか?よろしくおねがいします。
SSのタイトルとメニューを高さを中心に揃えたいのですがline-heightを使ってもうまくいきません
liを使ってるから余白が大きいのでしょうか?
うまくできる方法をお願いいたします!
0664Name_Not_Found
垢版 |
2018/10/18(木) 19:42:31.47ID:???
>>663
まずreset.cssを入れるんだ
そうすれば全ての文字サイズが同じになる
0665Name_Not_Found
垢版 |
2018/10/18(木) 19:51:25.60ID:???
懐かしい
そういえばreset.cssはもう使ってないなあ
でもどのブラウザ・デバイスでも崩れない
0666Name_Not_Found
垢版 |
2018/10/18(木) 20:19:31.04ID:???
MDLとbootstrapだったらMDLの方が良い?
0667Name_Not_Found
垢版 |
2018/10/19(金) 05:31:40.64ID:???
>>662
プログラム板の、VSCode のスレで聞いて
0668662
垢版 |
2018/10/19(金) 21:56:08.98ID:CDVXYcP/
>>667
ありがとう
行ってみます
0669Name_Not_Found
垢版 |
2018/10/27(土) 12:00:13.72ID:???
リンクをふんだときにサーバーがレスポンステキストをゆっくり返して
そのタイミングにあわせて処理ってできますか?

たとえばダウンロードボタンを押したときにファイルを準備するのにサーバー側で時間がかかるとして
サーバーからくるレスポンスの最初の10文字は準備状況を知らせるのに使って
10秒おきに1文字ずつ流れてくるみたいな感じで

クライアントでは1文字うけとるごとにプログレスバーをふやしていって10文字目がとどいたら
それ以降をダウンロードファイルの中身とみなしてダウンロード処理する
みたいなことってブラウザの標準機能とJavaScriptで実現できたりしますか?
0670Name_Not_Found
垢版 |
2018/10/27(土) 12:33:55.23ID:???
>>669
jsで10秒おきに一文字増やせば済む話

phpなら出来るといえば出来るけど、処理が意味不明すぎる
文字列を受け取る必要が無い
0671Name_Not_Found
垢版 |
2018/10/27(土) 14:41:02.34ID:???
10秒ってのはサーバー側の都合で1秒かもしれないし30秒かもしれない
ダウンロード前の準備にどれぐらいかかるかわからないので
サーバーの準備状況をクライアントにつたえたいって意味でした
0672Name_Not_Found
垢版 |
2018/10/27(土) 15:31:23.88ID:???
>>669
ゆっくり処理を返す事は可能だが、現実的ではない
ajax使うのが一般的

後、そもそもの設計がおかしいと思うがね
>サーバー側で時間がかかるとして
ここに時間を掛けないようにすれば全て解決する

仮にサーバーまるごとバックアップとかなら、
そんな処理をかまさずにcronで深夜にzipを作っておいて、
それをDLするだけで良い
0673Name_Not_Found
垢版 |
2018/10/27(土) 16:37:30.11ID:???
データベースは他のAPIとかから頻繁に更新される状態で
リクエストをうけとった時点でデータベースからデータをもってきてZIPを作って返したいんです

ajax を使う実装も試みたんですけど
受け取ったリクエストをダウンロードにみせる方法がわからなくて断念したんですよね
0674Name_Not_Found
垢版 |
2018/10/27(土) 17:26:57.57ID:???
>>663
それよりこの壁紙は何ですか?おじさんに教えなさい。
0675Name_Not_Found
垢版 |
2018/11/03(土) 10:43:07.73ID:???
669だけど結局1週間たって解決しなかった…

Rails サーバーで画面はリソースモデルの6画面そのまま index が一覧画面になってて
そこに検索機能がついててカラムの値でいろいろ検索というかしぼりこみができるようになってて
データ1つ1つがCSVファイルをもっててそれは前もってAWSのS3に保存してあるんだけど
最終的に絞り込んだ検索結果のCSVだけをS3からもってきてZIPを作ってダウンロード
っていうことが要求されてる

何も考えずに実装するとダウンロードボタンをクリックした瞬間ZIPを作り始めるて
ZIPが完成してから send_data で送り始めるからダウンロードが始まるまでに数分かかる
その間 chrome だと左下に localhost... を待機していますって出るだけでUI的に不親切だし
タイムアウトする可能性もあるから何らかの通信はし続けたいんですよね

ZIPをストリームで作ったそばから送ることができれば
ブラウザ側のダウンロード進捗がでてくれるからそれですむ話なんですけど
RailsサーバーでZIPを作りながらストリームで返すのがなかなか難しい
あとインポートの機能もあるのでどっちにしろインポートでは何かしらじぶんで進捗をかえさなきゃいけない

なのでコントローラーが処理中に>>669みたいな何らかの進捗レスポンスを返したいと思った次第なんですが
こっちもajax使ったりSSEだったりfetchだったりいろいろ使ってみたけど
リクエストレスポンスを1つのコネクションでできなかったりIEが対応してなかったりで結局解決しなかった…

しかも Rails と JS 両方が普通のHTTP通信じゃないことしなきゃいけないから両方に詳しい知り合いがいなくてきくにきけない
ダウンロードアップロードに進捗つけるのってふつうに需要りそうなのにこんなに大変なんですね

普段はJSやCSSとかフロントエンドメインで バックエンドはApache 上に PHP CGI おいて
フォームからきたデータを MySQL に保存するぐらいしかやったことがないので
Rails 初めてさわったんですけどフレームワーク使うと逆に制限が多くてやりたいことができなくて苦労します
0676Name_Not_Found
垢版 |
2018/11/03(土) 10:52:15.61ID:???
ただの愚痴?
あれもこれもで何がなんだかわからん
0677Name_Not_Found
垢版 |
2018/11/03(土) 10:56:20.85ID:???
すいません
質問なんですが要点もしぼりきれないんですよね
いろいろ実現する方法はあるけどどれもチャレンジしてみるとつまってしまって…

何か1つでもいいので

>Rails サーバーで画面はリソースモデルの6画面そのまま index が一覧画面になってて
>そこに検索機能がついててカラムの値でいろいろ検索というかしぼりこみができるようになってて
>データ1つ1つがCSVファイルをもっててそれは前もってAWSのS3に保存してあるんだけど
>最終的に絞り込んだ検索結果のCSVだけをS3からもってきてZIPを作ってダウンロード

これがタイムアウトせずに IE 含めたモダンブラウザで実現できる方法が知りたいのです
0678Name_Not_Found
垢版 |
2018/11/03(土) 16:00:29.09ID:???
サーバーサイドでかつオンデマンドでzip圧縮をかけるというのは糞設計。
同じタイミングで100人からアクセスあったらどうなる?
0679Name_Not_Found
垢版 |
2018/11/03(土) 16:56:36.78ID:???
100人分のデータが圧縮される
0680Name_Not_Found
垢版 |
2018/11/03(土) 18:21:30.13ID:???
クライアントからそういう要求がきたらどういう設計がいいの?
0681Name_Not_Found
垢版 |
2018/11/03(土) 21:26:58.56ID:???
サーバー側でアクセスが多いページの圧縮データをキャッシュしとけばいいんじゃ
0682Name_Not_Found
垢版 |
2018/11/03(土) 21:33:43.55ID:???
zip圧縮って何に対してzip圧縮なの
管理画面なら我慢してくれと歯科
0683Name_Not_Found
垢版 |
2018/11/03(土) 22:37:38.35ID:???
まあ設計の良し悪しは別にしてそういう仕様でも作ろうと思えば作れるけどな
0684Name_Not_Found
垢版 |
2018/11/03(土) 22:47:21.03ID:???
>>675
IEで動かないってfetchで動くコード作れてんならIEの方がもっと楽だぞ
UAみてIEかどうかで分岐いれてIEの場合XMLHttpRequestとほぼ同じメソッドでストリームが受け取れる拡張仕様があったはず
むしろ他のブラウザの場合だけfetchなりweb socket なりが必要になるだけ
まあsyntax errorがでるとJS全体が動かないからES6使えないのがだるいが
まあjavascript側は何とでもなる

どちらかというとサーバーでストリームでデータ流すのがわりと環境に依存するから難しい
フレームワークでレスポンスフラッシュするコードかいても
ホストサーバーやプロキシが勝手にキャッシュしてストリームにならなかったりする
自分はRailsは分からんが
0685Name_Not_Found
垢版 |
2018/11/03(土) 22:53:22.81ID:???
なんかもうボタン押す(phpファイルにアクセス)とイベント発火、ファイル生成
そのファイルの存在を確認してPHPからhtmlにDボタンなどを作成・・
という原始的なのが最も良い気がしてきた
少なくともトレイトやらなんやらをユーザーに押し付けない方が良いと思う
0686Name_Not_Found
垢版 |
2018/11/03(土) 23:26:59.29ID:???
ダウンロードに進捗つけるだけってそんな大変なん?
そこらへんのしょぼいサイトでも普通にやってることやん
0687Name_Not_Found
垢版 |
2018/11/03(土) 23:40:23.04ID:???
>686
一見普通に見えるそれは、一見それっぽく見える処置を見せてるだけ
それにまんまと騙されてるだけで、幸せですなーとしか思わない
種明かしすると、それまでスムーズに進んでいたものが30%ぐらいでピッタリとまったり、
99%ぐらいでピタァ圧止まることあるでしょ。それ

あほくさw
ダウンロードの処理はメチャクチャめんどくさいし、そんなもん実装しても誰一人得しない
もう今まで通り30%でピタッ!99%でピタッ!で良いと思う
それでも本気でダウンロードの進捗を見せたいっていうなら考えるけど
0688Name_Not_Found
垢版 |
2018/11/03(土) 23:40:58.55ID:???
ただのダウンロードでユーザの元に到着してるファイルサイズに対して進捗をつけるのは簡単
ダウンロードが始まる前にサーバー内でごちゃごちゃやってることに対して進捗をつけたいっていうから難しい

つーかそんなレスポンスに時間かかるなら非同期処理にしてレスポンスだけはすぐ返すもんじゃね
Railsだとその間ウェブサイト自体が他の接続に応答しないのは問題だろ
内部向けの管理画面っぽいからそれでもいいのかもしれんけど

まあセッション間で進捗情報を受け渡す必要がでるから進捗つけるのはさらに面倒になるけどな
0689Name_Not_Found
垢版 |
2018/11/03(土) 23:41:29.57ID:???
あれはファイルの数の進捗を見せてるだけだよ
しかも名前順なので、最後にデカイファイルが来るといつまで立っても99%から進まない
0690Name_Not_Found
垢版 |
2018/11/03(土) 23:43:16.60ID:???
進捗どうこう言うならそれこそいっこのzipにして後はブラウザの標準機能に任せればいいと思う
0691Name_Not_Found
垢版 |
2018/11/04(日) 00:18:07.53ID:???
ttps://teratail.com/questions/82898
0692Name_Not_Found
垢版 |
2018/11/04(日) 00:32:57.04ID:???
677です いろいろリプありがとうございます

>>678,681,682
別に圧縮をかける必要はないんです
無圧縮ZIPでもいいので「1操作で」「動的に選択した複数ファイル」をダウンロードできればいいのですが

>>683
教えてくださいお願いします

>>684
XDomainRequest.onprogress のことでしょうか
ttps://developer.mozilla.org/en-US/docs/Web/API/XDomainRequest
をよんで試した見たんですがサンプルコードの
if(window.XDomainRequest) が undefined になるんですよね
よくよくよむと
that worked in Internet Explorer 8 and 9. It was removed in Internet Explorer 10
ってなってて IE11 だめみたいです

>>688
それも考えたのですがRailsで非同期処理するのが思いの外大変で…
別にサーバーをたてないと非同期処理ができないみたいで…
apache だったらデフォルトで同時リクエストうけつけてくれるのに…
まあでも内部用の管理画面なのでコントローラーを占有するのは問題ないはずです
(その間操作できないことがUI的に親切に伝わればですが

>>687
やっぱり難しいんですね…
難しいってことがわかればあきらめるんですけど
一見当たり前についててほしいものなのでこんなこともできないのかって思われそうで…
0693Name_Not_Found
垢版 |
2018/11/04(日) 00:43:35.51ID:???
要件定義しないとなぁ
>>678みたいなのがあればタイムアウトなんて絶対に起きる
自社の管理いステム限定の処理なら起きないだろうという事は推測できるけど
前日で決まってる+数パターンなら夜中に作っておくという処理も考えられる
0694Name_Not_Found
垢版 |
2018/11/04(日) 00:49:10.03ID:???
要はその間に通信をし続ければいいんですよね
いくら巨大なファイルをダイヤル回線みたいな細い回線でダウンロードし続けても
進捗がある限りタイムアウトっておきないじゃないですか

ZIPをストリームで送る
処理中にレスポンスをストリームで少しずつ返してそれをJS側で進捗とみなす
非同期にしてレスポンスはすぐ返し、ajax で polling して進捗を返すAPIを追加する

のどれかができれば可能だとは思うんですが
どれもが Rails + IE っていう制約だとなかなかうまくいかなくて…
0695Name_Not_Found
垢版 |
2018/11/04(日) 01:04:43.68ID:???
つーかもう質問内容が初心者スレの内容でもないし
>>1 よんで webprog 板いったほうがいいんじゃね
ここはどっちかっていうと HTML CSS みたいなマークアップ関連の質問するところな気がする

まあRailsスレなんて人いるか知らんけど
0696Name_Not_Found
垢版 |
2018/11/04(日) 02:47:35.68ID:???
IEはまじでjavascript触る人にとっては癌だよなー
IE対応ってだけでjavascriptの工数倍とってもいいぐらいだわ
ES6使えないだけでも糞すぎ
0697Name_Not_Found
垢版 |
2018/11/04(日) 07:44:38.02ID:???
>>696
そのためにbabelがある。babelがない時代ならともかく
今それを言ったら、技術力低いってバレるぞ
0698Name_Not_Found
垢版 |
2018/11/04(日) 09:12:04.84ID:???
IEはjsじゃないからな
jsの工程多いなら別料金取れる
0699Name_Not_Found
垢版 |
2018/11/04(日) 10:00:40.25ID:???
>>697
だったら答えてやれば?
>IEでTransfer-Encoding: chunked受信する方法
0700Name_Not_Found
垢版 |
2018/11/04(日) 10:58:07.17ID:???
ajax関係はむしろもっと低レベルなAPIで仕様を統一してくれないとどうしようもない
0701Name_Not_Found
垢版 |
2018/11/04(日) 11:02:26.30ID:???
いまの話題でBabelとか言い出しちゃうほうが技術力低すぎ
ブラウザのHTTPハンドリングの内部実装やプロトコルのはなしなんだからbabelじゃ何も解決できん

ms-streamとか変なもん作ってるから…
0702Name_Not_Found
垢版 |
2018/11/04(日) 11:42:33.57ID:???
>>697
Babelってただの互換性吸収変換器だしなー
変換先のJSがIEで不可能なことはそもそも不可能なんだよなー
0703Name_Not_Found
垢版 |
2018/11/04(日) 11:46:16.34ID:???
IE11のサポートは2025年10月までだからがんばれ
サポートって言っても何もしてないがw
0704Name_Not_Found
垢版 |
2018/11/04(日) 11:47:06.21ID:???
>>699
それはJavaScriptの話じゃない。
勝手に話をすり替えんな
0705Name_Not_Found
垢版 |
2018/11/04(日) 11:48:41.74ID:???
>>696
> IEはまじでjavascript触る人にとっては癌だよなー
> IE対応ってだけでjavascriptの工数倍とってもいいぐらいだわ
> ES6使えないだけでも糞すぎ

JavaScriptの話だよな?
どうもIEの話とごっちゃにしてるバカが多いけど、
JavaScriptの問題。特にES6はBabelで解決できるよ
0706Name_Not_Found
垢版 |
2018/11/04(日) 11:48:57.22ID:???
jsだろうとなんだろうとIEが糞って事には変わりないよ
0707Name_Not_Found
垢版 |
2018/11/04(日) 11:50:45.57ID:???
質問者はIEでストリームレスポンスできる方法きいてるのにアスペかこいつ
質問と無関係な雑談したいならスレチ
0708Name_Not_Found
垢版 |
2018/11/04(日) 11:51:26.66ID:???
>>696は質問者(?)じゃないんですが?
勝手に別の人への回答にするなよ
0709Name_Not_Found
垢版 |
2018/11/04(日) 11:52:19.43ID:???
>>696にレスししてるのに、
勝手に別の人への質問にすり替え、
解答が違うとか、なにそれwww
0710Name_Not_Found
垢版 |
2018/11/04(日) 11:52:45.21ID:???
どう見ても質問じゃないだろ
そのレスのどこでなにを質問してんだ
アスペな上に日本語不自由か
0711Name_Not_Found
垢版 |
2018/11/04(日) 11:54:22.35ID:???
fetchがIEで使えなかった
→IEくそだよなー
→Babel 使え ← は?

マウントレスするならはなしのながれぐらいつかめるようになりましょう
0712Name_Not_Found
垢版 |
2018/11/04(日) 11:54:32.46ID:???
>>710
だから>>696にレスしてるだけだっつーの
お前がアスペだろw
0714Name_Not_Found
垢版 |
2018/11/04(日) 12:01:20.56ID:???
初回のレスでいきなりマウントレスするようなやうにかまうから
0715Name_Not_Found
垢版 |
2018/11/04(日) 12:04:04.69ID:???
まわりでBabelなんて使ってるやつ知らんのだが
学習コスト導入コスト変換コストがかかるだけでも工数が増えるしそれだけでも糞だろ
保守でBabelが使えることも条件になるしな
0716Name_Not_Found
垢版 |
2018/11/04(日) 12:09:50.17ID:???
>>692
WinJS.xhs ってのがある
XMLHttpRequest のラッパーになってて
ストリーム受信含むいろいろなことができるらしい
自分は使ったことはないんだけど
0717712
垢版 |
2018/11/04(日) 12:35:36.39ID:???
クソ雑魚ばっかりwww

>>692
> それも考えたのですがRailsで非同期処理するのが思いの外大変で…
> 別にサーバーをたてないと非同期処理ができないみたいで…
Railsで非同期するならActiveJob使えばいいやん?
普通にフレームワークに搭載されてる

>>675
別にRailsでZIPをストリームで返すことはできるけど、
それで本当に良いのかって話がある。

S3を使っているなら、Railsアプリを経由せずに、直接S3からダウンロードしたほうが良いからだ。
AWSは詳しくないが、同一リージョンならEC2(Railsサーバー)と
EC2の通信量は無料じゃないか?ならZIPもS3に作成し、
そこから直接ダウンロードしてもらったほうがコストも速度も良くなるだろう
その時のダウンロードURLについてはSigned URLが重要になってくるな

RailsでZIPをストリームで作ることもそんなに大変とは思わないが、
ダウンロードが始まるまでに数分かかるというのなら、ページ移動してしまう可能性もある。
だから一つのセッションとかに頼るのではなくて、非同期でZIP作成して
ZIPの作成の完了をAjaxで定期的に問い合わせたりすればいいだろう

そのときに、どこまで処理が済んだかを記録しておけば、ZIP作成の進捗状況を出すこともできる。
ダウンロード・アップロードも何処までデータを送信したか、受信したかを記録しておけば
(ダウンロード・アップロードとは別のセッションで)Ajaxを使って通知することは可能

S3から直接ダウンロード・アップロードさせる場合はIEでダウンロード・アップロードの
進捗状況を表示するのは難しいが、(ZIP作成の進捗状況通知ならできる)
Railsアプリを通すという前提であれば、IEでもできるぞ。
0718Name_Not_Found
垢版 |
2018/11/04(日) 12:47:40.20ID:???
>>677
> これがタイムアウトせずに IE 含めたモダンブラウザで実現できる方法が知りたいのです

可能

前提として時間がかかる処理は非同期で行う。これが鉄則。
Railsで非同期処理をするならActiveJobなどを使えば良い
S3ということだからAWSを使ってるのだろうけど、AWSの
非同期処理を行えるサービス(詳しくは知らない)を使うのもいいだろうな

まずRailsアプリはダウンロードのリクエストがきたら、それを非同期で
処理するようにしてクライアントにはすぐにレスポンスを返す。

サーバー側では非同期でゆっくりとZIP作成でもすればよい。
作成したZIPはS3に置いたほうがコストとパフォーマンスの両面で良いだろう。
スケールさせる場合(マシンの台数を増やした場合)同一のインスタンスに
アクセスするとは限らないという問題もある。ローカルディスクに保存してると、
作成したサーバーとは別のサーバーに接続したときにファイルが見つからない
サーバーが1台しか建てないっていうのなら、ローカルにZIPを作成してもいいけど。

そしてZIP作成の進捗状況はAjaxで定期的に監視すればよい。IEでも対応可能。

ダウンロードする場合のおすすめはS3に置いたZIPファイルを直接ダウンロード
してもらう方法だが、Railsアプリを経由してダウンロードする方法もあるにはある

質問からすれば、ZIPを返すまでの待ち時間の解決がメインみたいなので
ダウンロードの進捗状況までは知る必要はなさそうだが、やろうと思えば、
何処まで送信したかを記録することで、Ajaxで通知することは可能
0719Name_Not_Found
垢版 |
2018/11/04(日) 12:56:44.52ID:???
>>694
RailsアプリからZIPをストリームで送るということをやるなら、
別にJavaScript側でいろいろやる必要はない。JavaScriptもAjaxも何も要らない

やり方は、単にRailsアプリでメモリ内にZIPデータを作って返すだけだぞ
必要なのは、それができるライブラリを探すだけだろうな



あと「進捗がある限りタイムアウトっておきないじゃないですか」の解決策として
「非同期にしてレスポンスはすぐ返し」と書いているようだが、
Ajaxはすぐにレスポンスを返して通信を終了しているわけで、
「進捗がある限りタイムアウトが起きない」のとは関係ない話になってるぞ

Fetch APIなどを使って細かいチャンクごとにデータを受け取ってローカルで保存する方法はあるが
それを使わなくてもIEでも「進捗がある限りタイムアウトっておきない」だろ?
ゆっくりデータを返すのに必要なのはサーバーの対応だけで、IEだからって話にはなってない。
0720Name_Not_Found
垢版 |
2018/11/04(日) 13:07:41.87ID:???
ついでに、Fetch APIなどを使って細かいチャンクごとにデータを受け取る方法だが、
つまりはTransfer-Encoding: chunkedに対応するってことだが、
これはChromeなどでJavaScriptを使って対応することは可能だが、
それはそれとしてだ、サーバー側での対応も必要だぞ。

ダウンロードのためのリクエストが細かく送られてくる、それも一つのセッションではなく
チャンクごとに別々のセッションでリクエストが飛んでくるので、Rails側でそれに対応して
細かいチャンク毎にデータを返すように作らないといけない

だからZIPデータを(メモリに)作りながら、データを返すっていうのは難しいんだよ。
なぜならZIPを作成しているセッションとは別のセッションで次のチャンクの要求が来るからね

ちなみにS3はこの細かいチャンクごとのダウンロードに対応しているから、
S3からFetchAPIなどでダウンロードする方法の方が、サーバー側でチャンクごとのダウンロードを
実装しなくてすむ。つまりは、S3のCSVファイルからZIPを作ってS3に置くって話に戻るわけだなw
0721Name_Not_Found
垢版 |
2018/11/04(日) 13:09:41.41ID:???
俺は>>696にレスしてるだけだっていうのに、
本来の質問者に対してレスしろとか言われたから、
レスしてやったぜwww

途中参加で駆け足で思いつくまま書いたからわかりくいだろう。
続けてやるから、質問を続けるが良い
0722Name_Not_Found
垢版 |
2018/11/04(日) 13:16:28.70ID:???
692 です

>>716
ありがとうございます
これから調べて試してみようと思います
0723Name_Not_Found
垢版 |
2018/11/04(日) 13:17:14.57ID:???
>>717
丁寧にありがとうございます

>Railsで非同期するならActiveJob使えばいいやん?
軽く調べてみたらコード自体は簡単にかけるんですけどそれを動くようにするのに
sidekiqとかredis?みたいなジョブサーバーを建てないといけないみたいで
サーバーをたてるとなるとリソースの問題やモニタリングやログ監視とかも必要になってきて
たかがダウンロードに進捗つけるのにそこまでしなきゃいけないものなのかなと…

>別にRailsでZIPをストリームで返すことはできる
何っていうジェムをつかえばいいんでしょう
ファイルを逐次追加はできても send_data send_file できるのは
zipが完成してからってジェムしかないんですよね
zip自体はエントリ単位でストリームに対応してるアルゴリズムらしいのですが

>ZIPもS3に作成し
できればファイルに残さずメモリ上で処理したいんですよね
ダウンロードはこれまでも何度かつけたことがあるんですがファイルを作ってリダイレクトだと
完了したあとダウンロードされないことがあるとサーバーにごみが残り続けるって問題があって…

>非同期でZIP作成してZIPの作成の完了をAjaxで定期的に問い合わせ
仰る方法で実現することはできると思うし多数のユーザからリクエストが来るならそうするべきですが
今回内向け管理画面でオペレーターがひとりって想定でコントローラを専有してOKなので
いちばんはじめに>>669で質問したように >>669 ができればコーディングもリソースも楽なんですよね…
非同期処理にしても忙しい処理してる最中にポーリングして進捗にうけこたえするのって無駄な気がするんです
それに比べればKeeo-Aliveで進捗をストリームで受け取ることさえできれば
サーバー側でタイミングや頻度もコントロールできますしね

結局IE上のajaxでレスポンスをストリーム受信することって無理なんでしょうか…
Chromeではfetchのreadablestreamをつかってダウンロード進捗が動いたのでサーバーからはflushできてるみたいなので
あとIEで送られてきたレスポンスをバッファせず受け取ることさえできればすべてが解決するんですが…
0724Name_Not_Found
垢版 |
2018/11/04(日) 13:25:10.56ID:???
> 完了したあとダウンロードされないことがあるとサーバーにごみが残り続けるって問題があって…
cronでも使って定期的に後片付けすればいいよ

> Chromeではfetchのreadablestreamをつかってダウンロード進捗が動いたのでサーバーからはflushできてるみたいなので

ZIPを作成するまでの待ち時間が問題なんじゃなかったのか?

fetchのreadablestreamはJavaScriptでのダウンロード中に画面更新ができるという話で、
ZIP作成までの待ち時間は別の話だし、そもそもJavaScriptでダウンロードするのではなく
ブラウザにダウンロードさせれば画面更新は行えるだろう?

本当にやりたいことは何?
0725Name_Not_Found
垢版 |
2018/11/04(日) 13:27:45.37ID:???
> >別にRailsでZIPをストリームで返すことはできる
> 何っていうジェムをつかえばいいんでしょう

知らん。でも原理的にはできるだろ?
データ作りながら出力するだけ

どうやってS3のCSVファイルを参照しているのか知らんが、
ファイルとして扱えるのなら、zipコマンドでファイルに
書き出すのではなく標準出力に書き出せばできるはず
0726Name_Not_Found
垢版 |
2018/11/04(日) 13:32:12.15ID:???
>>723
> いちばんはじめに>>669で質問したように >>669 ができればコーディングもリソースも楽なんですよね…

それが楽という理由がわからん。

ダウンロードボタンを押されてサーバーにリクエストが飛んで、
サーバーがZIP作成などの処理を実行中に、その進捗状況をデータベースや
ファイルに書き込んでおいて、Ajaxで進捗状況を監視するのも大差ない。

むしろその方がJavaScriptで受け取ったデータの最初の10文字を消して
CSVファイルを保存するよりも楽だろう
0727Name_Not_Found
垢版 |
2018/11/04(日) 13:40:53.23ID:???
そういやZIPを作成しつつストリームでデータ返すなら
最終的なZIPのサイズは不明だから、何%終わったとかは
出せないな。何バイト送信したっていうのなら出せるけど
0728Name_Not_Found
垢版 |
2018/11/04(日) 14:34:05.60ID:???
いるよな質問者が本当にやりたいことは何ひとつ答えずに
自分の経験でしか語れないやつ

わからないなら黙ってればいいのに

1回のリクエストレスポンスでIE以外ではすでに実現できてるっていってるのに
今更全く別の無駄だらけの方法を1からやれってバカすぎる
たかがダウンロードに進捗つけるのにジョブサーバーとかcronとか
こういうリソースのこと何もかんがえないやつにサーバーサイドやらせた結果障害だらけになるんだろうな
0729Name_Not_Found
垢版 |
2018/11/04(日) 14:42:56.04ID:???
sidekiqはまじでやめとけ
直接かかわったことはないけど昔sidekiqがメモリリーク起こして頻繁に落ちて
解決するまで何度も夜中におこされて再起動かける別チームのメンバーみてきた

つーか Railsってまじで別のジョブサーバーがないと並列リクエストうけられんの?
さすがにゴミすぎだろ
もうApache 上に直接おけばいいじゃん
0730Name_Not_Found
垢版 |
2018/11/04(日) 15:00:38.66ID:???
>>724
>cronでも使って定期的に後片付けすればいいよ
基本的にフロントエンドでサーバーサイドはコードをいじれるってだけで
インフラの知識がないのでコマンド叩くとか基本的に設定をいじるとかそれも一苦労なのです

>ZIPを作成するまでの待ち時間が問題なんじゃなかったのか?
そうです
>本当にやりたいことは何?
ダウンロード前のZIP作成中に進捗を表示したい
例えばファイルを1つZIPに追加するごとに全体何ファイル中何ファイル目という進捗をクライアント側に送りたい

>fetchのreadablestreamはJavaScriptでのダウンロード中に画面更新ができるという話
fetchは本当にダウンロード前に encoding:chuncked なデータをリアルタイムでうけとれるんです

Rails で render stream:true というオプションをつけるとchunkedデータを返せるみたいで
ZIP作成中にファイルを1つ追加するたびにresponse.stream.write("{progress:1})
みたいにかくとダウンロード開始前に chrome 側にレスポンスが流れてきます
でさいごに response.stream.write("{complete:zipbody1})をつけておくって
javascript 側で complete: をみたら残りをファイルコンテンツとみなして blob を作るという感じで実際に動いてます
$ajax や XMLHttpRequest では途中で受け取る方法がわからなかったんですが
fetch の readableStream というのを使うとうけとれてこれが IE だけ動きません

>>726 >それが楽という理由がわからん
サーバーサイドの経験の差なのかも

フロントエンドがメインでサーバーはviewとかSQLのやりとりを軽くさわれるぐらいなので
ジョブサーバーをたてるってだけでノウハウも何もなくなにをしたらわかりません
しかも非同期実行中の進捗をメインコントローラーに受け渡す方法もわからないし
進捗を聞きに来た相手が最初のリクエストした相手と同定する方法もわからないし

逆にいまの方法だとサーバー側は render stream: true と response.stream.witeをかくだけ
クライアント側は文字列として取り出しさえできればあとは何とでもなるので…
0732Name_Not_Found
垢版 |
2018/11/04(日) 16:07:30.36ID:???
レベル高すぎて何いってるかさっぱりわからない
HTMLとCSSとwordpressしかつかえない俺からしたら別世界の話題
0733Name_Not_Found
垢版 |
2018/11/04(日) 16:50:32.00ID:???
>>731
やってみたんですけどだめでした
undefined じゃなくなってエラーは出なくなったのでうまくいったかなと思ったのに

ttps://sbfl.net/blog/2018/05/26/javascript-streams-api/

ここを参考にjavascript側をかいてたんですが
1行目の
.then((response) => response.body.getReader())
がトリガーされずに無反応

IEだけなんでこんな特殊な動作するんでしょうか;;

>>716
http://vividcode.hatenablog.com/entry/ie10/xhr-ms-stream
ここを参考にコードかいてみたんですけど
res.msDetachStream()
が undefined

WinJS.xhr({ url: uri, responseType: "ms-stream" }).
っていう独自の responsetype 使うみたいなのでサーバー側もただ response.write するだけではだめなのかも
ただ検索しても ms-stream に関するドキュメントがぜんぜんでてこなくてよくわかりません…

結局今週も解決できず…
もうあきらめようかな…
0734Name_Not_Found
垢版 |
2018/11/04(日) 17:14:24.12ID:???
バカバカしい。
csvごとき、サーバーでgzipかかるだろうからそのまま落としても大した転送量にならないだろ。
csvのまま取ってきてクライアント側でjsZipでzipファイルにすりゃいいだけだろ。
0735Name_Not_Found
垢版 |
2018/11/04(日) 17:20:09.27ID:???
>>734
なるほどです!
天才です

確かにそれならじぶんができる技術でできそうだし
タイムアウトもないし進捗処理も簡単につけられそうです

サーバー処理も大幅にかえなきゃいけないけど
現状手詰まりなので試してみたいと思います
ありがとうございます
0736Name_Not_Found
垢版 |
2018/11/04(日) 17:44:38.01ID:???
XMLHttpRequest って普通に途中のデータ拾えないっけ
res.readyState ==4 だけしかみてないなんてないよね?
readyState == 3 をみるんだよ
0737Name_Not_Found
垢版 |
2018/11/04(日) 17:49:18.34ID:???
ttps://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/dev-guides/hh673569(v=vs.85)
ちなみにこれの Comet streaming support のとこね
試したわけじゃないけど IE10 では普通に途中データうけとれるってかいてるんだけどなー
0738Name_Not_Found
垢版 |
2018/11/04(日) 19:00:09.58ID:???
>>736,737
わー! すごい! できました!
しかもコードもすごい短いしIEもChromeもUA分岐しなくても動くし最高です!!!

XMLHttpRequestでストリーム受け取るって記事がどこにもなくててっきりできないと思ってたんですが
readyStateの3がLoading中って意味だったんですね

fetchで作ったコードもほぼ流用できてサーバー側はなにひとつ変えずにすんだし
ほんとに助かりました

さすがプロの方すごいです
質問してよかったです
0739Name_Not_Found
垢版 |
2018/11/04(日) 19:04:32.67ID:???
おめでとう(パチパチ)
0740Name_Not_Found
垢版 |
2018/11/04(日) 19:09:28.34ID:???
>>739
>>737 さまですか 本当にありがとうございました
他にもリプいただけた方々ありがとうございました
0741Name_Not_Found
垢版 |
2018/11/04(日) 21:01:47.51ID:???
IEは能力自体は高いんだよ。

まだウェブに標準化という考えが乏しかった時代
IE6以外にまともなブラウザがなかった時代が長かったため、
それ以降の標準化への対応が遅れただけで、
搭載されている技術は10年先まで使える技術だったからな
0742Name_Not_Found
垢版 |
2018/11/04(日) 21:13:37.37ID:???
なぜIE以外のブラウザはcontent boxとかいうクソ仕様を採用したのか。
0746Name_Not_Found
垢版 |
2018/11/04(日) 22:20:29.74ID:???
IEが独自拡張なんじゃなくて、当時は標準そのものがなかった。
ボーダーをブロックの外につけるか中につけるかそういう仕様自体がなかった。
だからIEが間違いでも独自拡張なわけでもない。

IEの挙動(border box)の方が使い勝手が良かったが
他のブラウザはcontent boxの挙動で実装していた。作りやすかったんだろう。
この時はまだborder boxとかcontent boxなんて言葉はなかった

その後だよ。標準化の話が浮上したのは。IE嫌いのやつが
仕様を作ったのか、IEとは違う方が採用されてしまった。

そしてその数年後に、やっぱりIEの挙動のほうが便利だとわかって
挙動を変えられるようになった。このときにようやくborder boxと
content boxという言葉ができた。

今では細くデザインを調整する場合は、border boxにするのが常識となっている
0747Name_Not_Found
垢版 |
2018/11/04(日) 22:24:54.04ID:???
作りやすかったのかなんなのか知らんがデザイン側からしたらcontent boxなんてキチガイ仕様以外の何物でもない
0748Name_Not_Found
垢版 |
2018/11/04(日) 22:30:57.44ID:???
標準が間違っていた。(IEが正しかった)という例の一つやな

AjaxとかCanvasとか、当時は標準がなかったから仕方なかったが
技術で先行実装していたのは実はIE
0749Name_Not_Found
垢版 |
2018/11/04(日) 22:36:30.29ID:???
MSに工数かけさせるための嫌がらせで標準をIEと違えたんだよな。
割を食ったのはユーザー。と、お前ら。
0750Name_Not_Found
垢版 |
2018/11/04(日) 22:46:49.22ID:???
下手にborder boxが混在するとそれはそれでややこしくもあるわけで・・はぁ
後ラッパーかなんかつけないと何かができなかった気がする。ラッパーつければいいだけだけど
0751Name_Not_Found
垢版 |
2018/11/04(日) 22:58:45.68ID:???
>>749
その点HTML5は素晴らしかった。

第三者の団体でどこにも利害関係ありませんーを装った、現実を考慮しない
標準化団体の奴ら(おかげで標準化が全然進まなかった)とは違い、
HTML5は各社ブラウザメーカー主導で行われた。

そのため仕様は当時の主流ブラウザ(当然IE含む)の互換性を考慮して作られた。
<!DOCTYPE html> という短い記述はIE6でも標準モードになるから採用されたし

<meta charset="UTF-8"> というHTML5の書き方は、従来は以下のように書かなければいけない
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
だけど、IE6でも対応しているから採用された。

IE6が作られた時代に<meta charset="UTF-8">という書き方は存在しなかったのに
何故動作するのか?それはブラウザの間違った記述でも動くおせっかい機能が働いたため

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

http-equiv書き忘れてもOKにしよう
<meta content="text/html; charset=UTF-8">

ダブルクォートでくくるの忘れる人もいるんじゃね?
<meta content=text/html; charset=UTF-8>

content書き忘れてもOKにしよう
<meta charset=UTF-8>

という謎理論で、たまたま動作していた挙動が仕様となった。
他にも壊れたHTMLの解釈の仕方まで、主流のブラウザの挙動を考慮して仕様が作られた
0752Name_Not_Found
垢版 |
2018/11/04(日) 23:15:20.55ID:???
html5.0 見出しは全部h1にしようぜwwwh見出し数えるの面倒なんだよね〜〜www
html5.1 ごめん、やっぱ今のナシ

初めて俺が主導したプロジェクト、ひっそりと死亡する
0753Name_Not_Found
垢版 |
2018/11/05(月) 04:01:27.56ID:???
当時は標準がなかった、は本当なのか?
CSSが出来たのは1994年
IE1がリリースされたのも1994年
0754Name_Not_Found
垢版 |
2018/11/05(月) 06:54:36.61ID:???
CSS1がW3Cから勧告されたのは1996年12月
提唱、いいだしたのが1994年

CSSに対応したブラウザは、IEが3.0(1996年8月)
ネットスケープが4.0(1997年6月)
0755Name_Not_Found
垢版 |
2018/11/05(月) 11:16:55.57ID:???
ボタンを押したらDBからデータを取得してテキストファイルに書き込みするって部分を作ってます
書き込む先のテキストファイルは決め打ちにしてたんだけど書き込んで名前をつけて保存、ってこともやりたいなと思うんですがjavascriptで名前を付けて保存のようなダイアログボックスを出すことは可能ですか?
0756Name_Not_Found
垢版 |
2018/11/05(月) 11:40:33.96ID:???
>>755
・ダイアログは可能
・ファイル名は決められる
・場所はセキュリティ上ほぼできないと思っていい(完全に自分用なら作れる)
ダウンロード以降、どこに保存するかはブラウザに任せるしかない
流れとしては、以下のような形
ボタンを押す→ダイアログを出してファイル名をきめさせる→ダウンロード
0757Name_Not_Found
垢版 |
2018/11/05(月) 12:28:19.49ID:???
>>756
ありがとうございます
場所は指定出来ないのですね
自分もダウンロードなら出来るのかなと思ってたのですが名前を変更する方法が分からず断念してました
Javascriptを触るのが今回初めてなので的外れな質問かもしれませんが、ダイアログを表示させたりするモジュールやパッケージなどが用意されているのでしょうか?
0758Name_Not_Found
垢版 |
2018/11/05(月) 12:56:15.96ID:???
>>757
パッケージとかは知らない。多分無いと思う
ヘッダ触れるなら以下で実現できる
https://ja.stackoverflow.com/questions/32487/

無理なら

ブラウザでボタンを押す、ダイアログを出してファイル名をきめさせる
→サーバーでファイル名を受け取り、その名前でファイル生成
→ダウンロード

いずれにしろph側の処理が必要で、js単独でやる方法は無いと思う。あったらゴメン
0759Name_Not_Found
垢版 |
2018/11/05(月) 13:06:59.69ID:???
>>758
丁寧にありがとうございます
周りに聞ける人もおらず誰か知らない人が作ったものの改良なんで心折れかけてました
javascript単体でなんとか完結出来るのかと思って探してたのですが(サーバー側とかの知識がないため)それも難しいようですね
重ねて質問で申し訳ないのですが、セキュリティ上の関係で保存場所の指定ができないというのはどういう意味なのでしょうか?
0760Name_Not_Found
垢版 |
2018/11/05(月) 13:14:47.09ID:???
>>759
保存場所の指定ができないというより、PCの中身にアクセスできないと言ったほうが正しい
もしブラウザからPCの中身を見る手段があると、サイトを開いた瞬間、サイトの持ち主からPCの中身全部丸見えという事になる

で、このセキュリティをガバガバにする方法があるんだけど、
かなりめんどくさい
完全に自分用ならそれは実現できるけどね
0761Name_Not_Found
垢版 |
2018/11/05(月) 14:27:16.62ID:???
>>758
> →サーバーでファイル名を受け取り、その名前でファイル生成

そんなことしたら、他人がつけたファイル名とかぶった時に大変なことになるだろ

> いずれにしろph側の処理が必要で、js単独でやる方法は無いと思う。あったらゴメン

ダウンロード属性を使えばできる
https://developer.mozilla.org/ja/docs/Web/HTML/Element/a
IEでできるかどうかはよくわからん
https://qiita.com/wadahiro/items/eb50ac6bbe2e18cf8813
■ このスレッドは過去ログ倉庫に格納されています