2016-07-13 5 views
1

Я пытаюсь развернуть приложение Ruby on Rails с передним концом Node.js до Heroku. Я получаю:Развертывание проекта Ruby on Rails с компонентами React для Heroku

Enter image description here

Вот мой PROCFILE:

web:bundle exec thin start -p $PORT 

Вот мой package.json:

{ 
    "name": "collectize", 
    "version": "1.0.0", 
    "description": "[Heroku link][heroku]", 
    "main": "index.js", 
    "directories": { 
    "doc": "docs", 
    "test": "test" 
    }, 
    "engines": { 
    "node": "4.1.1", 
    "npm": "2.1.x" 
    }, 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "postinstall": "./node_modules/.bin/webpack" 
    "start": "node ./app/assets/javascripts/bundle.js" 

    }, 
    "repository": { 
    "type": "git", 
    "url": "git+https://github.com/winterblack/Collectize.git" 
    "start": "web:bundle exec thin start -p $PORT" 

    }, 
    "keywords": [], 
    "author": "", 
    "license": "ISC", 
    "bugs": { 
    "url": "https://github.com/winterblack/Collectize/issues" 
    }, 
    "homepage": "https://github.com/winterblack/Collectize#readme", 
    "dependencies": { 
    "babel-core": "^6.10.4", 
    "babel-loader": "^6.2.4", 
    "babel-preset-es2015": "^6.9.0", 
    "babel-preset-react": "^6.11.1", 
    "flux": "^2.1.1", 
    "react": "^15.2.1", 
    "react-dom": "^15.2.1", 
    "react-router": "^2.5.2", 
    "webpack": "^1.13.1" 
    }, 
    "devDependencies": {} 
} 

Вот мой Heroku журнал:

2016-07-13T05:29:29.266840+00:00 heroku[api]: Release v28 created by [email protected] 
2016-07-13T05:29:29.266840+00:00 heroku[api]: Deploy 7d61777 by [email protected] 
2016-07-13T05:29:29.456774+00:00 heroku[slug-compiler]: Slug compilation started 
2016-07-13T05:29:29.517376+00:00 heroku[web.1]: Restarting 
2016-07-13T05:29:29.518479+00:00 heroku[web.1]: State changed from up to starting 
2016-07-13T05:29:32.421302+00:00 heroku[web.1]: Stopping all processes with SIGTERM 
2016-07-13T05:29:33.846617+00:00 heroku[web.1]: Process exited with status 143 
2016-07-13T05:29:41.586027+00:00 heroku[web.1]: Starting process with command `npm start` 
2016-07-13T05:29:43.343250+00:00 app[web.1]: 
2016-07-13T05:29:43.343268+00:00 app[web.1]: > [email protected] start /app 
2016-07-13T05:29:43.343269+00:00 app[web.1]: > node ./app/assets/javascripts/bundle.js 
2016-07-13T05:29:43.343269+00:00 app[web.1]: 
2016-07-13T05:29:43.513547+00:00 app[web.1]: 
2016-07-13T05:29:43.520060+00:00 app[web.1]:  at Object.<anonymous> (/app/app/assets/javascripts/bundle.js:88:4) 
2016-07-13T05:29:43.520063+00:00 app[web.1]:  at Object.<anonymous> (/app/app/assets/javascripts/bundle.js:43:10) 
2016-07-13T05:29:43.520063+00:00 app[web.1]:  at Module._compile (module.js:456:26) 
2016-07-13T05:29:43.532480+00:00 app[web.1]: npm ERR! This is most likely a problem with the collectize package, 
2016-07-13T05:29:43.535942+00:00 app[web.1]: 
2016-07-13T05:29:44.242442+00:00 heroku[web.1]: Process exited with status 1 
2016-07-13T05:29:44.280956+00:00 heroku[web.1]: State changed from starting to crashed 
2016-07-13T05:29:44.282455+00:00 heroku[web.1]: State changed from crashed to starting 
2016-07-13T05:29:57.352852+00:00 heroku[web.1]: Starting process with command `npm start` 
2016-07-13T05:29:59.471893+00:00 app[web.1]: 
2016-07-13T05:29:59.471938+00:00 app[web.1]: > [email protected] start /app 
2016-07-13T05:29:59.471940+00:00 app[web.1]: > node ./app/assets/javascripts/bundle.js 
2016-07-13T05:29:59.471943+00:00 app[web.1]: 
2016-07-13T05:29:59.650297+00:00 app[web.1]: 
2016-07-13T05:29:59.654711+00:00 app[web.1]: /app/app/assets/javascripts/bundle.js:88 
2016-07-13T05:29:59.655117+00:00 app[web.1]:  $(document).ready(function() { 
2016-07-13T05:29:59.659133+00:00 app[web.1]:  at Object.<anonymous> (/app/app/assets/javascripts/bundle.js:88:4) 
2016-07-13T05:29:59.659135+00:00 app[web.1]:  at __webpack_require__ (/app/app/assets/javascripts/bundle.js:20:30) 
2016-07-13T05:29:59.659138+00:00 app[web.1]:  at Module.load (module.js:356:32) 
2016-07-13T05:29:59.659139+00:00 app[web.1]:  at Function.Module._load (module.js:312:12) 
2016-07-13T05:29:59.659140+00:00 app[web.1]:  at Function.Module.runMain (module.js:497:10) 
2016-07-13T05:29:59.659141+00:00 app[web.1]:  at startup (node.js:119:16) 
2016-07-13T05:29:59.672227+00:00 app[web.1]: npm ERR! node v0.10.30 
2016-07-13T05:29:59.672464+00:00 app[web.1]: npm ERR! npm v2.1.18 
2016-07-13T05:29:59.672884+00:00 app[web.1]: npm ERR! code ELIFECYCLE 
2016-07-13T05:29:59.673045+00:00 app[web.1]: npm ERR! [email protected] start: `node ./app/assets/javascripts/bundle.js` 
2016-07-13T05:29:59.673873+00:00 app[web.1]: npm ERR! This is most likely a problem with the collectize package, 
2016-07-13T05:29:59.674006+00:00 app[web.1]: npm ERR! not with npm itself. 
2016-07-13T05:29:59.674125+00:00 app[web.1]: npm ERR! Tell the author that this fails on your system: 
2016-07-13T05:29:59.674412+00:00 app[web.1]: npm ERR! You can get their info via: 
2016-07-13T05:29:59.674578+00:00 app[web.1]: npm ERR!  npm owner ls collectize 
2016-07-13T05:29:59.674919+00:00 app[web.1]: npm ERR! There is likely additional logging output above. 
2016-07-13T05:29:59.677307+00:00 app[web.1]: 
2016-07-13T05:30:00.517992+00:00 heroku[web.1]: State changed from starting to crashed 
2016-07-13T05:30:00.501781+00:00 heroku[web.1]: Process exited with status 1 
2016-07-13T05:30:01.842475+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=collectize.herokuapp.com request_id=111967a3-b265-4447-8e7e-da8a723b5b48 fwd="24.176.249.167" dyno= connect= service= status=503 bytes= 

На m у локальной машине мне нужно запустить:

~$ bundle install 
~$ npm install 
~$ webpack 
~$ thin start 

Должен ли я иметь Heroku запустить node bundle.js, чтобы получить мои React компоненты? Если да, почему бы мне не сделать это на моей машине? Разница между тем, что происходит на Heroku, и тем, что происходит на моей локальной машине, является основной задачей, о которой мне нужно разъяснить.

Эта строка в журнале кажется важным:

/app/app/assets/javascripts/bundle.js:88 
$(document).ready(function() { 

Я почти никогда не запускать файл JavaScript с Node.js (кроме некоторых отладки); Я почти всегда работаю с JavaScript в веб-приложении в HTML. Я попытался запустить node bundle.js локально и получил ReferenceError: $ is not defined. Я попытался изменить его на document.addEventListener("DOMContentLoaded", ... но тогда я просто получил ту же ошибку для документа, который не определен.

Я честно понятия не имею, куда идти отсюда. Я не понимаю, почему Heroku необходимо запустить node bundle.js, или он даже делает.

Я попытался удалить файл Procfile и просто поставить "bundle exec thin start -p $PORT" в качестве своего стартового скрипта в моем пакете.json, и это фактически запустило мой сайт «вверх», но без компонентов React (и так полностью пусто).

+2

Что вы имеете в виду nodejs front-end? Heroku позволяет прослушивать один сервер на одно приложение, поэтому вам понадобится 2 приложения, один для рельсов, один для узла. – AJcodez

+0

Я имею в виду, что мой проект использует реакцию. Я думал, что javascript работает в интерфейсе браузера. Ясно, что я не очень хорошо это понимаю. –

+0

Я вижу. Я подозреваю, что проблема заключается в том, что Heroku обнаруживает неправильный buildpack. Можете ли вы запустить 'heroku buildpacks' и сказать мне результат? – AJcodez

ответ

0

Очевидно, все, что мне нужно было сделать, это удалить мой nodejs buildpack и прочитать его с помощью индекса 1. Мой сайт сразу начал работать, когда я это сделал. Затем я удалил стартовый скрипт из моего пакета.json, и веб-сайт все еще работал. Затем я удалил свой профайл, и сайт все еще работает.

Итак, единственная проблема заключалась в том, что порядок сборки пакетов не требуется, нет необходимости запускать сценарий запуска.

1

Я нашел, что с Heroku вам нужно включить значок. Приложение будет аварийно завершено.

Включите это в <head>:

<link href="/images/favicon.png" rel="shortcut icon" type="image/png"/> 

Отрегулировать путь, имя файла и тип соответственно.

+0

Добавлен значок, но он не исправил мою проблему. Спасибо за совет. –

0

Проблема заключается в том, что Heroku настроен для обслуживания либо Rails-бэкенда, либо изоморфного интерфейса Node.js. Вы не можете делать это в одном приложении.

  1. Используйте два приложения. myapp-api.herokuapp.com is Rails и myapp-web.herokuapp.com Реагент изоморфен. Я лично принимаю интерфейс React на netlify.com, который является статическим хостингом.

  2. Сборка с использованием webpack во время сборки и обслуживание статических файлов из Rails. webpack-rails выглядит многообещающим.

Удалите узел nodeds buildpack и решите, как вы хотите обслуживать свой интерфейс. Отдельное приложение или статическая сборка.

+0

Я уверен, что это неправда. Я был исключен из appAcademy, но все же имею доступ к их учебной программе. Я могу увидеть десятки проектов Rails/React, развернутых в Heroku в одном приложении. Итак, я уверен, что это не исправление, но, к сожалению, я больше не могу получить помощь от TA, поэтому я не уверен, в чем проблема. Но я знаю, что это не так. –

+0

Я этого никогда не видел. Возможно, это возможно. – AJcodez

+0

Он только начал работать. Я удалил nodejs buildpack из героку и прочитал его с индексом 1, и, видимо, решил эту проблему. –

Смежные вопросы