NodeJS – 拒绝推送,没有检测到Cedar支持的应用程序

我已经“谷歌search”,并在这里find了许多类似的答案。 这是我确切的错误。

$ git push heroku master Counting objects: 43, done. Delta compression using up to 4 threads. Compressing objects: 100% (35/35), done. Writing objects: 100% (43/43), 5.19 KiB, done. Total 43 (delta 10), reused 0 (delta 0) ! Push rejected, no Cedar-supported app detected To git@heroku.com:vidperdiem.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@heroku.com:vidperdiem.git' 

是的,我确实按照Heroku指南(对NPM安装说),并确认我在Heroku的回购是一个遥远的

npm安装

这些是我的文件

的package.json

 { "name": "vidperdiem", "version": "0.0.1", "private": true, "scripts": { "start": "node app.js" }, "dependencies": { "express": "3.4.4", "jade": "*", "stylus": "*" }, "engines": { "node": "0.8.x", "npm": "1.2.x" } } 

Procfile

 web: node app.js 

app.js

 /** * Module dependencies. */ var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(app.router); app.use(require('stylus').middleware(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', function(req, res){ res.render('index', { title: 'Home' }); }); app.get('/about', function(req, res){ res.render('about', { title: 'About' }); }); app.get('/contact', function(req, res){ res.render('contact', { title: 'Contact' }); }); app.get('/privacy', function(req, res){ res.render('privacy', { title: 'Privacy' }); }); app.get('/terms', function(req, res){ res.render('terms', { title: 'Terms' }); }); app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

如果你像很多人一样遇到这个挑战,确保你已经掌握了基础知识。 在我的情况下,我需要在推向Heroku的根源。 这听起来很明显让我解释这是怎么发生的,以便你可以避免这种挫折。

我原来在Github上创build了回购,然后在本地克隆了回购。 然后在terminal上,我进入了具有README.md.gitignore的项目,我在github上初始化了它。

那时我创build了nodejs应用程序并将其命名为“app”。

然后,我在Heroku上创build了一个应用程序(通过网站,因为它更容易命名,而不是获得一个长的应用程序的名称)。

我回到terminal,并添加heroku作为远程与heroku git:remote -a appname (其中“appname”是您的回购的名称)。

这里的问题是,如果你在Heroku上跟踪应用程序,这将导致它成为github上的子模块 。

所以这就是为什么我加了heroku作为github跟踪变化的地方的远程。

底线:我将这些文件从“应用程序”文件夹中复制出来并放回到根目录。

在这里输入图像描述

确保以下文件位于您的根目录中
app.js
package.json
Procfile

当我试图为自己解决类似的问题时,我偶然发现了这个答案。

在我的例子中,我正在从非Heroku部署转移到Heroku部署。 所以Herkou实例运行在我设置的新的(本地)git分支上,因此不是主控。

一旦我解决了,答案是显而易见的。 而不是调用git push heroku master ,我不得不运行git push heroku mylocalbranch:master ,因为我试图推旧,非英雄部署,这显然是不会工作:)