【问题标题】:NodeJS - Push rejected, no Cedar-supported app detectedNodeJS - 推送被拒绝,未检测到支持 Cedar 的应用程序
【发布时间】:2013-11-28 15:46:41
【问题描述】:

我已经“用谷歌搜索”并在这里找到了许多类似的答案。这是我的确切错误。

$ 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 上的 repo 是远程的

这些是我的文件

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"
  }
}


过程文件

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'));
});

【问题讨论】:

  • 快速猜测:确保Procfilepackage.json 确实被git 跟踪
  • @NitzanShaked 我使用了来自 Github 的默认 .gitignore,所以这不是问题。问题是我在 Github 上创建了 repo,然后在本地克隆,然后在该文件中,我创建了 nodejs 应用程序。所以我能够将更改推送到 github 作为我的来源,但是使用 heroku 我不在根目录中。所以我将文件从应用程序文件夹中复制出来并将它们带到主文件夹中。我应该根据经验教训删除我的问题或答案吗?
  • 用经验教训回答。您甚至可以接受自己的答案。它在 rhe SO faq 中。好样的。

标签: git node.js heroku


【解决方案1】:

如果您像许多人一样遇到此挑战,请确保您已掌握基本知识。在我的情况下,我需要在推送到 Heroku 时处于根目录中。听起来很明显,让我解释一下这是怎么发生的,这样你就可以避免这种挫败感。

我最初在 Github 上创建了 repo,然后将其克隆到本地。然后在终端中,我进入了具有README.md.gitignore 的项目,我在 github 上对其进行了初始化。

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

然后我在 Heroku 上创建了一个应用程序(通过该站点,因为它更容易命名而不是获得一个长应用程序名称),当您执行 heroku create 时会发生这种情况。

我回到终端并使用heroku git:remote -a appname 将heroku 添加为远程(其中“appname”是您的repo 的名称)。

这里的问题是,如果您也在 Heroku 上跟踪应用程序,这将导致它成为 github 上的 submodule

这就是为什么我从 github 跟踪更改的同一位置添加 heroku 作为远程。

底线: 我从“app”文件夹中复制了文件并将其放回根目录。

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

【讨论】:

    【解决方案2】:

    我在尝试为自己解决类似问题时偶然发现了这个答案。

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

    一旦我想出答案,答案就很明显了。而不是调用git push heroku master,我不得不运行git push heroku mylocalbranch:master,因为我试图推动旧的非heroku部署,这显然是行不通的:)

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 2015-07-18
      • 2012-01-11
      • 2013-08-23
      • 2014-11-09
      • 2012-12-05
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      相关资源
      最近更新 更多