簡體   English   中英

將Node.JS應用程序部署到Heroku-緩存問題?

[英]Deploying Node.JS app to Heroku - Caching issues?

我目前正在嘗試將我的應用程序推送到Heroku。 我已經能夠部署它幾次,但是現在我在packages.json文件中將貓鼬從“> = 3.5.0”更新為“> = 3.6.0rc0”。 但是,版本3.6需要mpath和mpromise。

當slug編譯開始時,它使用貓鼬之類的緩存版本,當我啟動應用程序時,出現“錯誤:找不到模塊'mpath'”。

我試圖設置一個自定義的buildpack Git來停止緩存,我只是在bin / compile中注釋掉了緩存內容,可以在這里找到: https : //github.com/jValdron/heroku-buildpack-nodejs

這是推送的輸出: http : //pastebin.com/L3Yqy2NR

另外,當我從package.json中刪除了一些依賴項時,如果我使用“ heroku run bash”登錄,則可以看到那些已刪除的依賴項在node_modules中。 我已經嘗試刪除node_modules文件夾並執行另一個“ git push”,但這也不起作用。 那些刪除的部門仍然在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"
    }
}

如前所述,貓鼬設置為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 bash登錄,請heroku run bash ,然后導航到node_modules/mongoose/node_modules我會發現mpath和mpromise不存在。

node_modules在Git倉庫中。 通過從倉庫中刪除它,它可以正常工作。

現在heroku支持為node_modules禁用緩存: https ://devcenter.heroku.com/articles/nodejs-support#cache-behavior

Heroku維護一個緩存目錄,該目錄在構建之間保持不變。 該緩存用於存儲npm,yarn和bower的緩存。 如果願意,可以禁用Node.js應用程序的所有緩存:

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

您需要將package.json更新為您正在使用的最新版本的貓鼬

您還需要將mpath添加到package.json(在貓鼬條目之前)

您可以發布您的package.json文件嗎?

刪除node_modules的緩存並重新部署:

git rm -r --cached node_modules

然后git push heroku master

如果在重新部署時不希望緩存node_module,則也可以禁用緩存:

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

更改package.json中的Node版本對我有用。

例如:

"engines": {
    "node": "9.2.1"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM