作業メモ
朝から色々云々してたんですが上手くいかず。とりあえずイチからやりなおす。とりあえず node のバージョンも 0.4.7 にして、express も入れてとか色々下準備。
Heroku への deploy は成功してたんですがちゃんと動くのを見てないので、ってのもあるし、それ以前にローカルで試験しろよ的な微妙さ加減があったりなんかしてます。facebook の認証なリダイレクトってローカルで、可能なのかどうかも確認したい。
とりあえず
express の最初の状態で動作試験を。とりあえず package.json を以下にして
{ "name": "application-name" , "version": "0.0.1" , "private": true , "dependencies": { "express": "2.5.0" , "jade": ">= 0.0.1" , "connect-auth": "0.4.1" , "expresso": "0.7.7" } }
npm install した後で git 関連の諸々のナニを済ませとく。
$ npm install (ry expresso@0.7.7 ./node_modules/expresso express@2.5.0 ./node_modules/express ├── mkdirp@0.0.7 ├── qs@0.3.2 ├── mime@1.2.4 └── connect@1.7.3 jade@0.17.0 ./node_modules/jade ├── mkdirp@0.2.0 └── commander@0.2.1 connect-auth@0.4.1 ./node_modules/connect-auth ├── openid@0.3.1 ├── oauth@0.9.5 └── connect@1.7.3 $ git init $ cat >.gitignore node_modules *~ $ git add .
で、一応ローカルで動作の確認を。
$ node app.js Express server listening on port 3000 in development mode
welcome to express な出力を確認。次はこれを heroku に commit してみます。まず、仮想ホストを作るのか。
$ heroku create --stack cedar
ブラウザでも確認入れた後、git commit して push してみます。
$ git commit -m 'initial commit' $ git remote add heroku git@heroku.com:fuga.git fatal: remote heroku already exists. $
を、自動で追加されるとか知らなんだ。では push を、と思ったんですが Procfile が必要ですね。
$ cat Procfile web: node app.js $
で、これも add して commit して
$ git add Procfile $ git commit -m 'add Procfile'
push してみます。
$ git push heroku master
さて、どうなるか。deploy はできたんですが #80 なポートをリスンしなきゃだな。見慣れた Application Error な画面が出てます。ログも見とくか。
$ heroku logs --app fugahoge 2011-11-16T06:23:46+00:00 heroku[web.1]: Starting process with command `node app.js` 2011-11-16T06:23:47+00:00 app[web.1]: Express server listening on port 3000 in development mode 2011-11-16T06:23:47+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 3000, should be 24296 (see environment variable PORT) 2011-11-16T06:23:47+00:00 heroku[web.1]: Stopping process with SIGKILL
一部のみ、ですが。ちなみに #80 なポートに変更したらどうなるんかな。試験してみたら再度 Application Error な画面だ。ログも確認。どうやらハマッてたのはここなのかどうか。なんとなく EACCES が出てそげ。
2011-11-16T06:31:34+00:00 heroku[web.1]: Starting process with command `node app.js` 2011-11-16T06:31:35+00:00 app[web.1]: 2011-11-16T06:31:35+00:00 app[web.1]: node.js:134 2011-11-16T06:31:35+00:00 app[web.1]: throw e; // process.nextTick error, or 'error' event on first tick 2011-11-16T06:31:35+00:00 app[web.1]: ^ 2011-11-16T06:31:35+00:00 app[web.1]: Error: EACCES, Permission denied 2011-11-16T06:31:35+00:00 app[web.1]: at HTTPServer._doListen (net.js:1098:5) 2011-11-16T06:31:35+00:00 app[web.1]: at net.js:1069:14 2011-11-16T06:31:35+00:00 app[web.1]: at Object.lookup (dns.js:153:45) 2011-11-16T06:31:35+00:00 app[web.1]: at HTTPServer.listen (net.js:1063:20) 2011-11-16T06:31:35+00:00 app[web.1]: at Object.<anonymous> (/app/app.js:35:5) 2011-11-16T06:31:35+00:00 app[web.1]: at Module._compile (module.js:404:26) 2011-11-16T06:31:35+00:00 app[web.1]: at Object..js (module.js:410:10) 2011-11-16T06:31:35+00:00 app[web.1]: at Module.load (module.js:336:31) 2011-11-16T06:31:35+00:00 app[web.1]: at Function._load (module.js:297:12) 2011-11-16T06:31:35+00:00 app[web.1]: at Array.<anonymous> (module.js:423:10) 2011-11-16T06:31:35+00:00 heroku[web.1]: Process exited 2011-11-16T06:31:36+00:00 heroku[web.1]: State changed from starting to crashed
|
やっぱりか。ここの問題をなんとかすれば朝から作ってたナニも一つハードル超えれるのかどうなのか。単純に 24296 リスンせい、って話な気もするのでそうしてみるか。
む
[]を確認させて頂いたら
var port = process.env.PORT || 3000; app.listen(port);
な記述が。let 好きなわしとしては以下かも。
let (port = process.env.PORT || 3000) { app.listen(port); };
でもこれだとコンパイルエラー出ますね。
とりあえず 24296 な結果を確認。多分駄目だろな。駄目でしたので再度ログを確認。というか上記の書き方使えって話だろうと思います。ポートは度毎に変わりそげ。
しかしローカルで試験あまりしてないので歴史の変遷が汚いのなんの。とは言え、無事にハロワ状態が heroku で動いた訳ですが、朝からヤッてるソレも同様な修正を入れて確認してみます。
とほほ
盛り込み直したんですがループしてるなorz
これ Heroku でも同様だと思われるんですがどうなるんだろw
で、
if( req.isAuthenticated() ) {
な手続きはありやせんぜ旦那、てきメセジを吐いてオチてます。これは以前のナニと挙動が違うな。これは express.session を app.use しなかったのが原因らしい。追加してみて再試験。emacs 開きすぎててどれがどれだかワケワカorz
で、盛り込んでみたが挙動は変わらず。この経路を通過してなかったのだろうか、と思い (んな訳ゃないのですが)、connect-auth の example で確認してみましたがパスしとりますな。これはどうしてやれば良いものやら。
面倒なので
認証するナニだけ connect-auth のナニをパクって redirect 先を別アプリにするとかゆーのは乱暴に過ぎますかねぇ。
基本的には
- 認証後に redirect して code が取得できる
- redirect 先で code を使って auth_token を取得すれば良い
- アプリ側では auth_token が空の場合は認証アプリに redirect すりゃ良い
- logout したら auth_token 空にして Logoff な画面出せば良いか
てーことで何たるモジュール主義。
そりゃ良いとして、こーゆー解があるって早く気づけよ < 自分orz
作業は続く
とりあえず connect-auth/example をアプリ化。
- ディレクトリ掘って
- ファイルコピー
あと、node_modules 作れるように package.json 作りゃ良いのかな。必要そうなのは
- connect の 1.4.3
- connect-auth の 0.4.1
- oauth の 0.9.4
- openid の 0.3.1
あたりかと。以下をでっち上げて
{ "name" : "fbAuth", "version" : "0.0.1", "private" : true, "dependencies" : { "connect": ">= 1.4.3" , "oauth": ">= 0.9.4" , "openid": "0.3.1" } }
npm install するなど。
$ npm install oauth@0.9.5 ./node_modules/oauth openid@0.3.1 ./node_modules/openid connect@1.7.3 ./node_modules/connect ├── mime@1.2.4 └── qs@0.3.2 $
これで動かすとどうなるか。って connect-auth が無いorz
package.json に以下を追加。
, "connect-auth": "0.4.1"
で npm install リトライ。
$ npm install connect-auth@0.4.1 ./node_modules/connect-auth $
アホじゃなかろか。で、実行したら以下でオチた。
$ node app.js Caught exception: Error: Cannot find module '../lib/events'
まだ微妙な記述がありますね。ええと、
logoutHandler: require('./node_modules/connect-auth/lib/events').redirectOnLogout("/") }), example_auth_middleware(), connect.router(routes)); var port = process.env.PORT || 3000; server.listen(port);
なカンジにして正常動作を確認しました。git に登録して heroku にも流す。
$ git init $ cat >.gitignore node_modules *~ $ git add . $ git commit -m 'initial commit' $ heroku create --stack cedar $ git push heroku master
次は redirect 先のナニを作らんと。
しかし
これってもの凄いパクり方だなorz
あ、Procfile 作ってないや。どうもイケマセン。追加して push して正常動作を確認。ヤッてることがヘボすぎる。
と思ったら herokuapp 上で正常動作しとらんな。さっきループさせたから bang されているのかどうかorz
2011-11-16T09:52:33+00:00 heroku[router]: Error H99 (Platform error)
ってのは platform 側らしいのでとりあえず帰ろう。