Heroku、Kraken.js、Sockjsを友達にする方法に関する小さなメモ

少し前に、次の「ホーム」プロジェクトの実装のための新しいツールを探して、 Kraken.js -PayPalのオープンソースプロジェクトに出会いました 。 Kraken.jsは、別のエクスプレスベースのNode.jsフレームワークです。 Habrを検索しても、すべてのアカウントで何も見つかりませんでした。 ここでメインサイトへのリンクの形で1つの言及だけに会いました



それはどのように私を魅了し、有名なDerby.jsMeteor.jsSails.jsなどとどのように違いますか?



開発者(主にデータソース、パッケージマネージャーなど)に非常に厳しい制限を課すことはなく、同時にコードに何らかの構造を導入し、MVCモデルに従うことを提案するため、まず第一に彼が好きでした。 プロジェクトのウェブサイトにすべてが完全にペイントされているため、ここでそのすべての長所と機能について詳しく説明したくありません。すぐに「私の羊」に行きます。



したがって、タスクはKraken.jsアプリケーションにHerokuサービスを入力し、そこで動作させることです。



Ubuntu 13.10で以下に説明するすべての手順を実行することを予約しますが、他のOSには大きな違いはないはずです。 開始するには、 heroku.comにアクセスしてHerokuを操作するためのコンソールクライアントであるHeroku Toolbeltを登録してダウンロードします。 コマンドラインに入力します:

$ heroku login
      
      





これで、Herokuにアプリケーションをデプロイする準備が整いました。 次のステップは、Kraken.jsをインストールすることです。このために実行します:

 $ sudo npm install -g generator-kraken
      
      





次に、プロジェクトディレクトリに移動し、コマンド$ yo kraken



を入力して、ジェネレーターの質問にインタラクティブに答えます。

      、 '"" `。
     / _ _ \
     |(@)(@)| クラーケンをリリース!
     )__(
    /、 '))(( `。\
   (((())))
    `\`)( '/'

 [?]アプリケーション名:Kraken-Sockets
 [?]説明:socks.jsを使用したクラーケンアプリケーションのテスト
 [?]著者:<あなたの名前>
 [?] RequireJSを使用しますか?  (Y / n)n


ジェネレーターは、アプリケーションとKraken.jsアプリケーションの基本構造と同じ名前のディレクトリを作成しました。 構造をさらに詳しく検討してください。

 /config        json /controllers      /lib        /locales   /models  /public Web-,  /public/templates    /tests   - index.js     ()
      
      





npm start



コマンドを入力し、localhost:8000で作業中のKraken.jsアプリケーションを鑑賞できます。 OK、Herokuにアップロードします。 ただし、最初にアプリケーションを要件に合わせる必要がありますpackage.json



ファイルは既にありますが、次の内容のProcfile



ファイルを作成する必要があります。

 web: node index.js
      
      





このファイルは、Herokuがアプリケーションを起動する方法を示しています。 これらのファイルに加えて、HerokuはアプリケーションがPORT



環境変数で指定されたポートでリッスンすることを要求します。 json configsを介してこれを行うことはできません。 特にこれらの場合、Kraken.jsはソフトウェア構成メカニズムを提供します。 ソフトウェア構成を担当するメソッドは、 index.js



ファイルにindex.js



ます。 次のフォームを提供する必要があります。

 app.configure = function configure(nconf, next) { // Async method run on startup. nconf.set('port', Number(process.env.PORT || 5000)); next(null); };
      
      





さて、プロジェクトのgitリポジトリを作成します:

 $ git init $ git add . $ git commit -m "init"
      
      





そしてする:

 $ heroku create kraken-test-socksjs
      
      





Herokuは、 kraken-test-socksjs.herokuapp.comで利用可能なアプリケーションを作成し、すぐにリモートリポジトリに接続し、そこにプッシュしてサーバーにアプリケーションをインストールします。

私たちは試します:

 $ git push heroku master
      
      





kraken-test-socksjs.herokuapp.comにアクセスして、すべてが機能することを確認します。 しかし、喜んで大急ぎしないでください。 最初のコミット(たとえば、メインページテンプレートに何かを追加する)は、アプリケーション全体を破壊します。 その後、ログ( $ heroku logs



)を表示してグーグルで$ heroku logs



何時間もかかりました。 そして、すべてが非常にシンプルであることが判明しました。 Herokuは、何らかの理由で、第2レベルの依存関係をいくつか失います(アプリケーションの依存関係の依存関係-恐ろしいように思えますが、例を挙げます:私たちの場合、 kraken-js



モジュールが依存するformidable



モジュールを失います)。 そして、彼はリソースを準備するためのうんざりするタスクを実行しません(より少ないもののコンパイル、テンプレートなど)。



これらの問題を解決するには、 package.json



ファイルですべてのdevDependencies



dependencies



転送し、 dependencies



"grunt-cli": "~0.1.13"



モジュールを追加します"grunt-cli": "~0.1.13"



。 これにより、アプリケーションをデプロイするときにgruntを手動で呼び出すことができます。 すべての変更後、 package.json



ファイルは次の形式になります。

 { "name": "kraken-sockets", "version": "0.1.0", "description": "", "author": "Your Name", "main": "index.js", "scripts": { "test": "grunt test", "start": "node index.js", "postinstall": "./node_modules/grunt-cli/bin/grunt build --force" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "kraken-js": "~0.7.0", "express": "~3.4.4", "adaro": "~0.1.x", "nconf": "~0.6.8", "less": "~1.6.1", "dustjs-linkedin": "~2.0.3", "dustjs-helpers": "~1.1.1", "makara": "~0.3.0", "mocha": "~1.17.0", "supertest": "~0.8.2", "grunt": "~0.4.1", "grunt-cli": "~0.1.13", "grunt-contrib-less": "~0.9.0", "grunt-dustjs": "~1.2.0", "grunt-contrib-clean": "~0.5.0", "grunt-contrib-jshint": "~0.6.4", "grunt-mocha-cli": "~1.5.0", "grunt-copy-to": "0.0.10" }, "devDependencies": { } }
      
      





アプリケーションリソースを準備するだけのスクリプト"postinstall"



に注意してください。 リソースの問題に対処し、欠落しているモジュールをどうすればよいですか? これは明らかに、新しいHerokuモジュールキャッシングシステムのバグです。 先日彼らにチケットを書きますが、今のところはheroku-repoプラグインを扱っています。 各「プッシュ」リリースの直前に、次のコマンドでモジュールのキャッシュを消去します。

 $ heroku repo:purge_cache -a kraken-test-socksjs
      
      





うわー、HerokuとKraken.jsの友情が対処しましたが、今最も良い部分はSockjsをKrakenにねじ込むことです。



Sockjsはnpmモジュールの形式で配布され、エクスプレスアプリケーションに完全にねじ込まれていますが、それを固定するにはサーバー(express.jsがハングしているhttpモジュールで表されるもの)にアクセスする必要があります。 したがって、Kraken.jsでは、開発者からは十分に隠されています。 しかし、Krakenのソースコードを詳しく調べて、それを入手する方法を見つけました。 このセクションの代わりにindex.jsに挿入する必要がある既製のコードを提供します。

 kraken.create(app).listen(function (err) { if (err) { console.error(err.stack); } });
      
      





ここにあります:

 var k = kraken.create(app); k.listen(function (err) { if (err) { console.error(err.stack); } else { var http = k.app.get('kraken:server'); var sockjs_opts = {sockjs_url: 'http://cdn.sockjs.org/sockjs-0.3.min.js'}; var sockjs_echo = sockjs.createServer(sockjs_opts); sockjs_echo.on('connection', function(conn) { hub.sockjs_pool.push(conn); conn.on('data', function(message) { hub.sockjs_pool.forEach(function(con) { con.write(message); }); }); }); sockjs_echo.installHandlers(http, {prefix:'/echo'}); } });
      
      





これで締めくくります。 すべてのプロジェクトコードはgithubで表示できます。 ここでデプロイされたアプリケーションを試してください



この記事が、HerokuでKraken.jsアプリケーションをデバッグし、すべての便利な機能を台無しにするときに、誰かが時間を節約するのに役立つことを本当に願っています。

PSこれは私の最初の記事なので、建設的な批判は大歓迎です。



All Articles