簡體   English   中英

如何讓 Heroku 運行子文件夾中的節點應用程序?

[英]How do I get Heroku to run my node app that's in a subfolder?

我有一個入口點在這里的節點應用程序

/backend/src/index.js

在本地,如果我嘗試從項目根目錄運行node./backend/src/index.js ,我會遇到很多路徑錯誤,但如果我進入backend文件夾並運行cd ,我的節點應用程序./src/index.js運行。 我認為這都是由於通過節點應用程序使用了相對路徑。

如何將此應用程序部署到 heroku 並使其正常運行? 我目前收到這樣的 503 錯誤

2017-07-31T03:02:17.759410+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=[redacted] ... dyno= connect= service= status=503 bytes= protocol=https

有沒有辦法告訴 heroku 在執行啟動腳本之前cdbackend文件夾? 我可以用Procfile做到這一點嗎?

如果您使用的是 Heroku 的標准 NodeJS buildpack,我可以想出一種方法讓您入門。

這個 buildpack 實際上在你的根路徑中搜索package.json (所以這是一個要求)。 package.json中,您可以為您的應用指定一個啟動腳本,如下所示:

"scripts": {
  "start": "cd backend/src && node index.js"
}

這應該將 Heroku 引導到cd到您的目錄,然后從那里啟動服務器。 您可以在此處參考相關文檔。

Heroku 需要存儲庫根目錄中的package.json和鎖定文件,否則部署將失敗。

但是,您可以在 repo 的根目錄中設置一個package.json ,它會為子目錄安裝依賴項並運行它們的相關命令。

以 yarn 為例(你可以用 npm 做類似的事情),你可以在根目錄中放置一個空的yarn.lock和一個package.json ,例如:

{
  "name": "my-project",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "postinstall": "yarn --cwd <subdirectory> --production=false install",
    "build": "yarn --cwd <subdirectory> serve"
  }
}

--production=false是可選的,但確保將安裝 devDependencies ,否則不會發生,因為NODE_ENV在 Heroku 的環境中設置為production環境。

Heroku 的 buildpack 默認安裝 devDependencies,然后在稍后修剪它們,因此如果您需要它們中的任何一個來構建您的項目作為部署它的一部分,您將需要該部分。

暫無
暫無

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

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