Cloud9を触ってみた。

ubuntu 10.10にCloud9環境を構築してみました。

http://codedehitokoto.blogspot.jp/2012/01/nodeidecloud9.html

上記ページを参考にやってみました。
既にGitやNode.jsはインストール済みである前提です。

Node.jsをまだインストールしていない場合は、Node.jsを触ってみたを参照してインストールしてください。

Gitに関しては、Google先生に聞けば山ほど情報があると思います。

で、本題です。

$ git clone git://github.com/ajaxorg/cloud9.git
$ cd cloud9/bin/
$ ./cloud9.sh

とすると、こんなエラーが発生。

Error: Cannot find module 'dryice'
at Function._resolveFilename (module.js:320:11)
at Function._load (module.js:266:25)
at require (module.js:348:19)
at Object. (/Users/cmeier/workspace/clojureland/
workspace/ace/Makefile.dryice.js:39:12)
at Module._compile (module.js:404:26)
at Object..js (module.js:410:10)
at Module.load (module.js:336:31)
at Function._load (module.js:297:12)
at Array. (module.js:423:10)
at EventEmitter._tickCallback (node.js:126:26

ネットを色々検索していると、

$ sudo npm link .

をすれば?的なコメントがあったのでやってみてもこんなエラーが発生。

Error: Each commonjs root should be a directory: /home/tomotaro1065/cloud9/node_modules/ace/lib
at CommonJsProject. (/home/tomotaro1065/cloud9/node_modules/dryice/lib/dryice/index.js:665:13)
at Array.map (native)
at new CommonJsProject (/home/tomotaro1065/cloud9/node_modules/dryice/lib/dryice/index.js:663:27)
at Function.copy.createCommonJsProject (/home/tomotaro1065/cloud9/node_modules/dryice/lib/dryice/index.js:936:10)
at worker (/home/tomotaro1065/cloud9/Makefile.dryice.js:43:30)
at main (/home/tomotaro1065/cloud9/Makefile.dryice.js:35:9)
at Object. (/home/tomotaro1065/cloud9/Makefile.dryice.js:100:5)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)

どうやらaceというモジュールが必要なんだろうと思い、

$ sudo npm install ace
$ sudo npm install treehugger

なんかをやってみても、

@@@@ FATAL ERROR: DRYICE FAILED { '0': 'Failed to find module: ace/lib/fixoldbrowsers' }

make: *** [plugins-client/lib.ace/www/worker/worker-language.js] エラー 1
Linux 64 bit
path.existsSync is now called `fs.existsSync`.

module.js:340
throw err;
^
Error: Cannot find module 'asyncjs'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/home/tomotaro1065/cloud9/plugins-server/cloud9.process-manager/process_manager.js:11:13)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)

もう完全にブチ切れました。もうCloud9なんて知るかぁ!!

しかし、何とか思いとどまりました。こんははずはない。何か間違っているはずだと。

あきらめずに検索していると、下記のサイトを発見。

http://ubuntuforums.org/showthread.php?t=1813076

先ほどのサイトとは少し手順が違うみたいなのでやってみた。

$ git clone git://github.com/ajaxorg/cloud9.git
$ cd cloud9
$ git checkout devel
$ git submodule update --init --recursive
$ bin/cloud9.sh

おぉ〜。動いたぁ!
と思ったのもつかの間。

$ bin/cloud9.sh -w ~/nodework/express-hellocl/

expressで生成したプロジェクトをCloud9に読み込ませて、ポート番号だけ変更して(Cloud9が既に3000番を使っているため。)実行するも、zlibがないとかってコンソールに出る。

node.js:116
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'zlib'
at Function._resolveFilename (module.js:299:11)
at Function._load (module.js:245:25)
at require (module.js:327:19)
at Object. (/usr/local/lib/node_modules/express/node_modules/connect/lib/middleware/compress.js:14:12)
at Module._compile (module.js:383:26)
at Object..js (module.js:389:10)
at Module.load (module.js:315:31)
at Function._load (module.js:276:12)
at require (module.js:327:19)
at Object.compress (/usr/local/lib/node_modules/express/node_modules/connect/lib/connect.js:89:14)

引き続き、色々調べてみると、どうやらNode.jsのバージョンが0.6よりも古いとこのようなエラーが出ることがあるという情報に行き着いた。
が、自分が入れているNode.jsは0.8.11。おかしい。。。と思っていたら、Cloud9.shの中を見てみると、Cloud9に添付されているNode.jsを起動しており、そのバージョンが0.4系であることが判明。
なぜ、今頃0.4。。。

Cloud9.shを0.8.11のNode.jsを起動するように書き換えて実行してみた。すると、今度は下記のようなエラーが発生。

Error: require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead.
at Function.Module._compile.Object.defineProperty.get (module.js:386:11)
at Object. (/usr/local/lib/node_modules/cloud9/support/paths.js:7:8)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/usr/local/lib/node_modules/cloud9/bin/cloud9.js:6:1)
at Module._compile (module.js:449:26)

色々と調べて、

$ export NODE_PATH=/usr/local/lib/node_modules/

などをやってみるも変化なし。どうも新しいバージョンのNode.jsではrequire.pathsが削除されたが、Cloud9で使用しているためのエラーっぽいです。

ん。。。完全に手詰まりかと思っていた時に。

$ npm -g install cloud9

だけでインストールできて楽チンだよね。みたいな記事を発見。
まじか。今までの苦労は?と思ったが、とりあえず藁にもすがる思いでやってみるも、

Error: require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead.
at Function.Module._compile.Object.defineProperty.get (module.js:386:11)
at Object. (/usr/local/lib/node_modules/cloud9/support/paths.js:7:8)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/usr/local/lib/node_modules/cloud9/bin/cloud9.js:6:1)
at Module._compile (module.js:449:26)

なんじゃい、それは!!

もうあきらめようと何度も思いましたが、ふとCloud9のフォルダを眺めているとREADME.mdファイルが目に留まりました。

何気なく中身を見てみると、なんとインストール方法が書いとるやないかぁ!!

何々。sourcemintでソース管理をするようになった?

$ sudo npm install -g sm
$ git clone https://github.com/ajaxorg/cloud9.git cloud9
$ cd cloud9
$ sudo sm install
$ bin/cloud9.sh -w ~/nodework/express-hello/

とりあえず、Cloud9は起動した。が、app.jsをダブルクリックして開こうとすると、

http.js:686
throw new Error('Can\'t render headers after they are sent to the client.'
^
Error: Can't render headers after they are sent to the client.
at ServerResponse.OutgoingMessage._renderHeaders (http.js:686:11)
at ServerResponse.res._renderHeaders (/home/tomotaro1065/cloud9/node_modules/connect/lib/patch.js:76:25)
at ServerResponse.writeHead (http.js:950:20)
at module.exports.getList (/home/tomotaro1065/cloud9/plugins-server/cloud9.ide.filelist/filelist-plugin.js:77:33)
at Socket. (/home/tomotaro1065/cloud9/plugins-server/cloud9.ide.filelist/filelist.js:55:17)
at Socket.EventEmitter.emit (events.js:88:17)
at Pipe.onread (net.js:390:31)

シュン。。。なんでやねん。。。もういややぁ。無理!!!


気を取り直してMac OS Xで再挑戦。

なぜか、Mac OS XではREADME.mdに書いてある方法で、正常に動いている模様。おぉ、ブレークポイントも止まるし、ステップ実行も出来るやん。変数の中身も見れる。

Windowsでは動くんかなぁ。。。
あれ?sourcemintのインストールで失敗してる。
まぁ、良いか。Windowsやし。気にしない、気にしない。(^^;

Ubuntuでは何で動かないんかなぁ。。。色々と試行錯誤でごちゃごちゃしてたから、変なごみでも残ってるんかなぁ。今度、クリーンにして、最初からやってみようか。