4

Reveal.js アプリケーションを Heroku にデプロイしようとしています。Reveal.js は、grunt connectコマンドを介してノード上で実行されます。このアプリでは、オンザフライでアセットをコンパイルするために Ruby も必要です。を使用して、ローカルでアプリを実行できますgrunt serve

コンパスは の依存関係であるため、当初、grunt watchHeroku は Gemfile のみを検出し、Ruby アプリを実行していると想定しました。nodejs カスタム ビルドパックを使用して、Heroku に nodejs アプリとして認識させるようにしました。

プロファイルに含まれるもの

web: grunt serve

ログショー

 2013-06-17T13:51:56.187012+00:00 heroku[router]: at=error code=H14 desc="No web processes running"

heroku psも何も示しません。「heroku run grunt serve」を正常に実行できます。また、reveal に付属するデフォルトの Gruntfile.js を変更して、process.env ie を受け入れるようにしました。

connect: {
  server: {
    options: {
      port: process.env.PORT || 8000,
      base: '.'
    } 
  }
}

最後の試みとして、デプロイ時に Gruntタスクを実行してアセットをコンパイルするHeroku-nodejs-grunt ビルド パック ( https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt ) を使用してみました。まだ運が悪く、heroku logs --tailまだプロセスが実行されていません。で探索するとheroku run、grunt が使用可能であることがわかり、grunt serveコマンドが正常に実行されます。

新しい grunt ビルド パックの使用を開始すると、上記の Gruntfile.js で「プロセス」が未定義であるというエラーが発生しました。ポートを0に切り替えました。

Web サーバーが応答するポート。指定したポートがすでに使用されている場合、タスクは失敗します。特別な値 0 または '?' を使用できます。システムが割り当てたポートを使用します。

動作せず、「?」を試しても動作しませんでした (まだ Web プロセスheroku restartがなく、何もしません)

Heroku で grunt サーブをメインの Web サーバー プロセスとして使用する方法がわかりません。

4

3 に答える 3

6

nodejsとexpressJsを使用して動作させることができました。

Heroku の「nodejs を使い始める」に従って、expressjs で動作する webapp を取得し、これを web.js で宣言することができました。

var express = require("express");
var app = express();
app.use(express.logger());
app.use("/", express.static(__dirname));

var port = process.env.PORT || 5000;
app.listen(port, function() {
  console.log("Listening on " + port);
});

これにより、/ からすべてを静的に提供します。

ここにソースがあります: https://github.com/MichaelBitard/revealjs_herokuとここに実例があります: http://murmuring-cove-4212.herokuapp.com/

于 2013-09-28T11:14:46.710 に答える
0

現在、express v~4.13.3express.logger()は廃止されており、express パッケージには含まれていません。これを解決するには、依存関係をインポートする必要がありましたmorgan

私のweb.jsファイルは次のようになりました:

var express = require('express');
var morgan = require('morgan');
var app = express();
var port = process.env.PORT || 5000;

app.use(morgan('combined'));
app.use('/', express.static(__dirname));
app.listen(port, function() {
  console.log('Server started on ' + port);
});

また、package.json を更新して morgan lib を含める必要がありました。ファイル内の私の依存関係は以下で動作します:

...
"dependencies": {
    "express": "~4.13.3",
    "morgan": "~1.7.0",
    "grunt-cli": "~0.1.13",
    "mustache": "~2.2.1",
    "socket.io": "~1.3.7"
},
...
于 2016-06-08T21:54:07.400 に答える
0

あなたの問題は、デフォルトでgrunt serveにバインドされることでしたlocalhost。機能させるには、次のようにいくつかの小さな変更を加える必要がありますreveal.js

最初に次のように追加grunt-cliしますdevDependency

diff --git a/package.json b/package.json
index 10489bb..4c58442 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
     "grunt-contrib-connect": "~0.8.0",
     "grunt-autoprefixer": "~1.0.1",
     "grunt-zip": "~0.7.0",
+    "grunt-cli": "~0.1.13",
     "grunt": "~0.4.0",
     "node-sass": "~0.9.3"
   },

次に、 の代わりにバインドするために使用されるhostnameパラメータを に追加します。grunt0.0.0.0localhost

diff --git a/Gruntfile.js b/Gruntfile.js
index 3e67b9f..b2bfc47 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,5 +1,6 @@
 /* global module:false */
 module.exports = function(grunt) {
+   var hostname = grunt.option('hostname') || 'localhost';
    var port = grunt.option('port') || 8000;
    // Project configuration
    grunt.initConfig({
@@ -94,6 +95,7 @@ module.exports = function(grunt) {
        connect: {
            server: {
                options: {
+                   hostname: hostname,
                    port: port,
                    base: '.',
                    livereload: true,

これで、次の内容でを作成しProcfileて、Heroku にデプロイできます。

web: npm install && node_modules/.bin/grunt serve --hostname 0.0.0.0 --port $PORT

に必要な変更のPRを作成しましたreveal.js

于 2015-02-12T13:15:33.243 に答える