2013-06-17 4 views
3

Я пытаюсь развернуть приложение opens.js в Heroku. Reveal.js работает на узле через команду grunt connect. Приложение также требует рубинов для компиляции активов «на лету». Локально я могу запустить приложение, используя grunt serve.Как развернуть приложение opens.js для heroku?

Первоначально, из-за того, что компас был зависимым от grunt watch, Heroku обнаружил только Gemfile и предположил, что я запускаю приложение ruby. Я использовал custompack nodejs custom, чтобы заставить Heroku видеть его как приложение nodejs.

PROCFILE содержит

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 запустить хрюкать служить» успешно, и я изменил Gruntfile.js по умолчанию, сопровождающую раскрыть принять process.env т.е.

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

В последней попытке, я попытался с помощью Heroku-nodejs- grunt build pack (https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt), который будет запускать задачу для развертывания для компиляции активов. Еще не повезло, heroku logs --tail все еще не показывает никакого процесса. Изучение с помощью heroku run показывает, что хрюканье доступно, и команда grunt serve успешно выполняет.

Когда я начинаю использовать новый сборник grunt, я получил сообщение об ошибке с указанным выше Gruntfile.js, в котором «процесс» не определен. Я переключил порт на 0.

Порт, на который будет реагировать веб-сервер. Задача не удастся, если указанный порт уже используется. Вы можете использовать специальные значения 0 или '?' для использования назначенного системой порта.

Не работал, пробовал «?», Не работает (до сих пор нет веб-процесса и heroku restart не ничего не делает)

Я не могу понять, как получить Heroku использовать хрюкать служить в качестве основного процесса веб-сервера!

ответ

5

Мне удалось заставить его работать с помощью nodejs и expressJs.

К следуя Heroku «начать работу с nodejs», я был в состоянии получить рабочий веб-приложение с expressjs и объявляя это в 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/

+0

Это отлично работает и подробно описано в сообщении о точке сайта. Если вы примете примечание Майкла, просто убедитесь, что вы добавили Express в качестве зависимости в вашем пакете. Json. http://www.sitepoint.com/creating-slick-html-presentations-using-reveal-js/ – AndyBean

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 к grunt, который будет использоваться для связывания с 0.0.0.0 вместо localhost.

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.

0

В настоящее время с экспресс v ~ 4.13.3 express.logger() устарел и не включен в экспресс-пакет. Чтобы решить эту проблему, мне пришлось импортировать зависимость 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 включить Либерал Моргана. Мои зависимости в файле работают с:

... 
"dependencies": { 
    "express": "~4.13.3", 
    "morgan": "~1.7.0", 
    "grunt-cli": "~0.1.13", 
    "mustache": "~2.2.1", 
    "socket.io": "~1.3.7" 
}, 
... 
Смежные вопросы