haskell-ja > Archives > 2011/11/09

2011/11/09 01:26:58 UTCkazu
#
Yesod でリンクを相対パスにすることはできないんでしょうか? Routing の記述で先頭の "/" を削っても絶対パスになってしまいます。(ああ、実装が目に浮かぶようだ。)
2011/11/09 01:44:24 UTCmaoe
#
絶対パスの話はここら辺に出てきます。http://www.yesodweb.com/book/typeclass#file284-rendering-and-parsing-urls-rpu2
#
[1..100]>>=penさん。http://www.yesodweb.com/book/の例は小さいものからはじめるのでわかりやすいかと思います。
2011/11/09 02:06:00 UTCkazu
#
うーむ。
#
すると、Yesod を裏に抱える reverse proxy は、パスを書き換えてはいけないという理解で OK ですか?
#
ちなみに、昨日から mighty にreverse proxy の機能が入りました。
#
書式は /path1 >> [domain][:port]/path2 です。
#
Yesod の場合は、
#
/app/hello >> :8080/app/hello
#
みたいに書かないといけない。絶対パスだから、パスを書き換えてはいけない。。。
2011/11/09 02:34:52 UTCmaoe
#
絶対パスと相対パスで何が違うのか理解できていません。www.example.com:80 (mighty) -> wiki.example.com:8080 (yesod)みたいな例を
#
考えると
#
yesod内でwiki.example.com:8080を保持しているかどうかはmigthyには関係なく、/ >> wiki.example.com:8080/ と書けばOKなのではないのですか?
2011/11/09 02:36:33 UTCkazu
#
ああ、それはサーバー名で区別しているからです。
#
同じサーバー内で、別ポートにリレーすることを考えてみて下さい。
#
他のパスは、静的ファイルが使っているとします。
#
すると、/app/hello などのパスに合致したら、別ポートにリレーすることになります。
#
このとき /app/hello/ を / に書き換えたとしましょう。
#
Yesod は、絶対パス、たとえば /page を HTML 中に埋め込みます。
#
絶対パスなのでブラウザーは、/app/hello/ を保管できません。
#
s/保管/補完/
#
なので、パスは書き換えられないですね。
#
僕としては
#
/app/hello >> :8080/app/hello
#
ではなく
#
/app/hello >> :8080/
#
としたかったけど、Yesod が絶対パスを埋め込んで返すので、無理だなぁっていうことです。
2011/11/09 02:42:49 UTCmaoe
#
URLの埋め込みをしたときに問題になるってことですね
2011/11/09 02:45:33 UTCkazu
#
そうです。
#
URL の埋め込みをしないアプリの方が一般的ですか?
2011/11/09 02:48:36 UTCmaoe
#
/app/helloが/にproxyされるときに/で<a href="./maoe">ようこそmaoeさん</a>というリンクを埋め込む場合、相対パスでないといけないと理解しました。
#
よく使うと思います
2011/11/09 02:50:00 UTCkazu
#
そうです。
2011/11/09 02:50:11 UTCcutsea110
#
確か絶対パスしか扱ってないと思う。
2011/11/09 02:50:59 UTCkazu
#
分かりました。Yesod で、パスを埋め込んで返すアプリを作ったら、reverse proxy ではパスを書き換えてはいけない。という理解でいいですね。
2011/11/09 02:51:03 UTCcutsea110
#
全部絶対パスに展開されてしまうんじゃなかったかな。
#
http://www.yesodweb.com/book/example-blog
#
あ、ごめん今張ったリンクは別の話ね。
#
return "http://www.yesodweb.com/book/example-blog" >>= [1..100]>>=pen
#
初期のチュートリアルってすごい簡易なものだから物足りないか。
#
私はhaskellersとかyesoddocを参考にしてた。
#
動くものがホストされてて、開発者が作っているアプリだから一番よいかなと。
2011/11/09 03:01:20 UTCcutsea110
#
相対パスが扱えなくて弱ったのはhttpとhttpsの両方をホストしたいって時に、アプリにapproot="http://www.example.com"というのを書くところがあって、こいつを相対パスで書けないの?って相談したらhttp://...とhttps://...はURIとして別ものジャン?というような回答もらったことがある。
#
やりようはあって、RequestのisHTTPを見て切り替えるようにすればいいって案はもらったんだけど、結局使わなかったのでとりあえず今回の0.9 catch upで消し飛ばした。
#
ちなみに0.9系だとAppConfigとかYesod.Defaultとか提供されてて、scaffoldされるコードもそれ前提なんだけど、config/settings.ymlに書かれるようになっているので、こいつに合わせると当時のやり方は通用しないんじゃないかと思ってる。
#
相対パス欲しいと思うんだけど変なのか?
2011/11/09 03:07:55 UTCkazu
#
変じゃないと思います。実装者の都合をユーザに押し付けているように思えます。
2011/11/09 03:08:52 UTCcutsea110
#
ちなみにmarkdownを使ったWiki作ってた時にも画像をアップして、そいつのURLをWikiのコンテンツに自動挿入する処理を書く必要があったんだが、URLが絶対パスなものだからapproot="http://..."な部分を削り飛ばす処理を書いてて残念な気がした。
#
最初からmarkdown採用しなきゃ専用のWIKI記法でなんとでも出来たかもしれんという後悔の念を押し殺して進めた。
2011/11/09 08:46:37 UTC[1..100]>>=pen
#
yesod devel でブラウザから求められるのは email とパスワードでした。"confirmation e-mail will be sent to you" とかいわれるのでびびってそこで止まってます。
#
「yesoddoc」でググっても何もひっかからないのですがこれ何でしょう?
2011/11/09 08:48:04 UTCcutsea110
#
試してないから分からないけど、まさかHashDBとかが組み込まれたのかな?
#
https://github.com/yesodweb/yesod/blob/master/yesod/scaffold/Foundation.hs.cg
#
無いな。
#
あれ?yesod develでブラウザから求められる?ってどういうこと?
#
0.9.3で最近試したけどそんなん聞かれたっけ?
2011/11/09 09:06:01 UTCcutsea110
#
パスワードが利かれるってのはちょっと分からないけど、そのメッセージとyesodで検索したらやっぱりEmailリマインダ関係のメッセージっぽいよ。
#
少し古いyesodでscaffoldすると認証にOpenIdとEmailの両方が含まれて、どっちでも認証可能なんだけど、Emailの方はメールリマインダが飛ぶので、そのメールアドレス入力を促しているんだと思うんだが、パスワードを求められるってのは引っ掛かる。
#
ちなみにそのページの出るURLはどうなってますか?
2011/11/09 10:53:14 UTC[1..100]>>=pen
#
yesod init で name, project_name, foundation, s(for sqlite) を入力して cd project_name; cabal install; yesod devel してブラウザから http://localhost:3000 にアクセスすると email と password の入力欄のある画面が出ます。以上は Ubuntu で。
2011/11/09 22:18:58 UTCcutsea110
#
cabal-devの方でやってみよう。
#
あ、cabal-dev installは時間かかるんだった。
#
ながいなー
2011/11/09 22:30:39 UTCcutsea110
#
動かしてみたけど出ないよ?
#
ソース見てもこれといって内容ないな。
#
こちらはyesod-0.9.3.1
#
あとUbuntu11.10だけど、そこは関係ないか。