Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

本文中に自サイトへのリンクがあった場合、画像チェック用のHEADリクエストがRequestTimeoutになる。 #93

Closed
Echos opened this issue Oct 4, 2012 · 11 comments
Labels

Comments

@Echos
Copy link
Collaborator

Echos commented Oct 4, 2012

例えば、 massr-foo.herokuapp.comでMassrが運用されている場合、
本文中にhttp://massr-foo.herokuapp.com/XXXXX へのリンクがはられた場合、
HEADリクエストがRequest TimeOutになる。

@tdtds
Copy link
Member

tdtds commented Oct 4, 2012

↑これはとりあえずのworkaroudですよね?

基本的にはheadに答えるrouteを作ることになると思うけど、中身を作らずにheadを出すことはできないので、いっそbeforeでheadをgetに置き換えてもいいかも。

@Echos
Copy link
Collaborator Author

Echos commented Oct 5, 2012

はい、とりあえずの暫定対処です。(自サイトリンクはよくされるので…)

全パターンのHEADどうしようかと思ってましたが、なるほどgetに置き換えた方がいいかもですね。
(本当にHEADが必要なパターンがあった場合は都度組み込めばいいわけですし)

@ghost ghost assigned Echos Oct 5, 2012
@tdtds
Copy link
Member

tdtds commented Oct 5, 2012

proxy対応(!)のついでにやってしまいました

@Echos
Copy link
Collaborator Author

Echos commented Oct 5, 2012

おお、ありがとうございます!

@tdtds
Copy link
Member

tdtds commented Oct 5, 2012

ちがうこれじゃないw

@Echos
Copy link
Collaborator Author

Echos commented Oct 5, 2012

git diff 読みまくって辿りつけないと思ってたら・・・w

@Echos
Copy link
Collaborator Author

Echos commented Oct 10, 2012

というわけで、HEADリクエストに関してはGETリクエストに変換する方式として、修正します。
別途HEADが必要になった場合は処理を追記する感じで。

@Echos
Copy link
Collaborator Author

Echos commented Oct 11, 2012

現状として、thin(おそらくWebRick, Mongrel, Unicornも)が1プロセスで動作する場合、複数リクエストは順次処理する(並列処理しない)ため、現在の流れだと、

① POST '/statement' 実行(自ホストへのリンクを本文に含む)
② 本文中のリンクにHEAD Requestを送信(自サイトへリクエスト発信)
③ ①の処理中であるため、②のリクエストが処理待ちに
④ ③のため、①も終了せず、Timeoutが発生してエラー終了

となります。
Herokuは2プロセス目から課金なので、thinのマルチプロセス化は回避したいところです。
(※マルチプロセスにしても同じプロセスに振られる可能性もある)

そこで対処案ですが、
・自サイトへのリンクに関しては投稿時にHEADリクエストを確認しない。(暫定対処版まま)
・別スレッドで、Statement.photosの確認処理を組み込んで自サイトへのリンクはそれのみで確認。
で良いかなぁ…とか考えてます。どんなもんですかね?

他に案があれば提示いただけると幸い。

@tdtds
Copy link
Member

tdtds commented Oct 12, 2012

もともとStatement.photosのチェックは(自サイト以外も含め)全部Threadでやるべきだと考えていたので、2番目の方法が良いと思います。なぜなら、シングルスレッドのWebサーバの場合、ここがボトルネックになって他のリクエストも止めてしまうことになるから。

もっとも今のところは暫定対処で問題なくさばけているので、当面はこのままでいいんじゃないですかね。やるとなったら自動更新の方もphotosの動的変更に対応しないといけないし。

#RackかSinatraに、HTTPを介さずにレスポンスを得る方法もあるとは思うけどね……。

@Echos
Copy link
Collaborator Author

Echos commented Oct 12, 2012

了解ですー
ではこちらCloseしてあたらにスレッド化のissueを立ち上げます。

@Echos Echos closed this as completed Oct 12, 2012
@tdtds
Copy link
Member

tdtds commented Oct 12, 2012

新スレ #102

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants