将Node.JS应用程序部署到Heroku – caching问题?

我目前正试图推动我的应用程序Heroku。 我已经能够部署它几次了,但是现在我已经在我的packages.json文件中将mongoose从“> = 3.5.0”更新为“> = 3.6.0rc0”。 但是,版本3.6需要mpath和mpromise。

当slu comp编译开始时,它使用caching版本的mongoose或其他东西,因为当我的应用程序启动时,我得到“错误:找不到模块'mpath'”。

我试图设置一个自定义的buildpack Git,将停止caching,我刚刚注释了caching的东西bin / compile,可在这里: https : //github.com/jValdron/heroku-buildpack-nodejs

以下是推送的输出: http : //pastebin.com/L3Yqy2NR

此外,当我从package.json中删除了一些依赖,如果我用'heroku运行bash'login,我可以看到那些删除了node_modules中的依赖关系。 我已经尝试删除node_modules文件夹,并做另一个“混帐推”,这也没有工作。 而那些删除的dep仍然在node_modules。

任何人有一个想法如何解决这个问题?

编辑:

这是我的package.json文件:

{ "name": "souply-api", "version": "0.1.0", "author": "Jason Valdron <jason.valdron@orangesprocket.com>", "description": "Main gears that runs the Soup.ly application", "dependencies": { "bcrypt": ">= 0.7.3", "express": ">= 3.0.5", "extend": ">= 1.1.3", "imagemagick": ">= 0.1.3", "jade": ">= 0.27.7", "knox": ">= 0.4.6", "less": ">= 1.3.1", "less-middleware": ">= 0.1.9", "moment": ">= 1.7.2", "mongoose": ">= 3.6.0rc0", "mongoose-types": ">= 1.0.3", "node-native-zip": ">= 1.1.0", "nodemailer": ">= 0.3.37", "oauth2orize": ">= 0.1.0", "passport": ">= 0.1.15", "passport-local": ">= 0.1.6", "passport-google": ">= 0.2.0", "passport-facebook": ">= 0.1.4", "passport-twitter": ">= 0.1.4", "passport-http": ">= 0.2.1", "passport-http-bearer": ">= 0.2.0", "passport-oauth2-client-password": ">= 0.1.0", "poor-form": ">= 1.1.3", "request": ">= 2.12.0", "socket.io": ">= 0.9.13" }, "engines": { "node": "0.8.x", "npm": "1.1.x" } } 

如前所述,mongoose被设置为3.6.0rc。 Mpath是Mongoose的package.json文件中的依赖项。 如果我看看我的本地mongoose package.json文件,我可以看到:

 "dependencies": { "hooks": "0.2.1" , "mongodb": "1.2.11" , "ms": "0.1.0" , "sliced": "0.0.3" , "muri": "0.3.0" , "mpromise": "0.2.0" , "mpath": "0.1.1" } 

另外,如果我用heroku run bashlogin,并导航到node_modules/mongoose/node_modules我看到mpath和mpromise不存在。

node_modules在Git仓库中。 通过从回购中删除它,它工作正常。

现在,heroku支持为node_modules禁用caching: https ://devcenter.heroku.com/articles/nodejs-support#cache-behavior

Heroku维护一个caching目录,在构build之间持久化。 该caching用于存储npm,纱线和凉亭的caching。 如果您愿意,可以禁用Node.js应用程序的所有caching:

heroku config:set NODE_MODULES_CACHE=false git commit -am 'disable node_modules cache' --allow-empty git push heroku master

你将需要更新你的package.json是你正在使用的最新版本的mongoose

你也需要在你的package.json中添加mpath(在mongoose入口之前)

你可以发布你的package.json文件吗?

删除node_modules的caching并重新部署:

 git rm -r --cached node_modules 

然后git push heroku master

如果在重新部署时不想cachingnode_module,也可以禁用caching:

 heroku config:set NODEMODULESCACHE=false git commit -am 'rebuild' --allow-empty git push heroku master heroku config:unset NODEMODULESCACHE