简体   繁体   English

GCP App Engine 和 Cloud Build:找不到模块“/workspace/server.js”

[英]GCP App Engine and Cloud Build: Cannot find module '/workspace/server.js'

TLDR: Sorry for the longest question in history, but I hope this is comprehensive for any users having a similar problem. TLDR:很抱歉历史上最长的问题,但我希望这对任何有类似问题的用户来说是全面的。 My app deploys successfully from cloud shell to my domain;我的应用程序从云 shell 成功部署到我的域; however, when I try cloud build, I get Cannot find module '/workspace/server.js' The error likely has to due with my build handlers in the app.yaml, or something to do with my cloudbuild.yaml.但是,当我尝试云构建时,我得到Cannot find module '/workspace/server.js'错误可能与我在 app.yaml 中的构建处理程序有关,或者与我的 cloudbuild.yaml 有关。

Solution: use the right handlers in app.yaml standard and properly set up your cloudbuild.yaml解决方案:在 app.yaml 标准中使用正确的处理程序并正确设置您的 cloudbuild.yaml

I am having trouble using App Engine and Cloud Build together.我在同时使用 App Engine 和 Cloud Build 时遇到问题。 I am using Cloud Build to set up CICD with my Github repo.我正在使用 Cloud Build 通过我的 Github 存储库设置 CICD。 I think the issue is due to the fact that I have been not been deploying the production build to app engine.我认为这个问题是由于我没有将生产构建部署到应用程序引擎。 I was able to successfully deploy manually (dev version) with:我能够通过以下方式成功手动部署(开发版):

gcloud app deploy

Now, I am having trouble with my Cloud Build.现在,我的 Cloud Build 遇到了问题。 In particular, I am trying to run flex environment, but I keep getting "Neither "start" in the "scripts" section of "package.json" nor the "server.js" file were found."特别是,我正在尝试运行 flex 环境,但我一直在“package.json”的“scripts”部分中找不到“start”,也没有找到“server.js”文件。” But my package.json has a startup script?但是我的package.json有启动脚本?

I also tried standard environment instead of flex, but I couldn't get the handlers figured out.我也尝试了标准环境而不是 flex,但我无法弄清楚处理程序。 I tried dozens of examples.我尝试了几十个例子。 I have included the standard environment app.yaml so you can see it.我已经包含了标准环境 app.yaml 所以你可以看到它。

Here's my package.json:这是我的 package.json:

{
  "name": "flier-mapper",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@firebase/storage": "^0.8.4",
    "@parcel/transformer-sass": "^2.0.0",
    "@react-google-maps/api": "^2.7.0",
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "bootstrap": "^5.1.3",
    "cors": "^2.8.5",
    "emailjs-com": "^3.2.0",
    "firebase": "^9.2.0",
    "firebase-admin": "^10.0.0",
    "firebase-functions": "^3.16.0",
    "react": "^17.0.2",
    "react-bootstrap": "^2.0.2",
    "react-dom": "^17.0.2",
    "react-ga": "^3.3.0",
    "react-helmet": "^6.1.0",
    "react-icons": "^4.3.1",
    "react-pricing-table": "^0.3.0",
    "react-router-dom": "^5.3.0",
    "react-scripts": "4.0.3",
    "react-tabs": "^3.2.3",
    "stripe": "^8.188.0",
    "web-vitals": "^1.0.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

Here's my cloudbuild.yaml.这是我的 cloudbuild.yaml。 I also tried deleting the dir line:我还尝试删除 dir 行:

steps:

- name: "gcr.io/cloud-builders/npm"
  dir: 'frontend'
  args: ['install']
  timeout: "5m"

- name: "gcr.io/cloud-builders/npm"
  dir: 'frontend'
  args: ["run", "build"]
  timeout: "5m"

- name: "gcr.io/cloud-builders/gcloud"
  entrypoint: bash
  args: 
    - "-c"
    - |
        cp app.yaml ./build
        cd build
        gcloud app deploy
  timeout: "1600s"

timeout: 60m

Here's my flex app.yaml:这是我的 flex app.yaml:

runtime: nodejs
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
  # The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

And here's one of the many handlers I tried with a standard environemnt:这是我在标准环境中尝试过的众多处理程序之一:

runtime: nodejs14

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1

handlers:
  # Serve all static files with url ending with a file extension
  - url: /(.*\..+)$
    static_files: build/\1
    upload: build/(.*\..+)$
  # Catch all handler to index.html
  - url: /.*
    static_files: build/index.html
    upload: build/index.html

  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

EDIT编辑

So, I got it to run on standard environment, which is useful for https requests.所以,我让它在标准环境下运行,这对 https 请求很有用。 Here's my app.yaml that I got working:这是我开始工作的 app.yaml:

runtime: nodejs14

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 2

handlers:

- url: /.*
  secure: always
  redirect_http_response_code: 301
  script: auto

However, now my problem is this:但是,现在我的问题是:

Error: Cannot find module '/workspace/server.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15)
    at Function.Module._load (internal/modules/cjs/loader.js:745:27)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
    at internal/main/run_main_module.js:17:47 {

Which is essentially the same issue as above.这与上述问题基本相同。

GCP App Engine 上的 500 服务器错误

EDIT 2编辑 2

I'm wondering if it is because now that I am running a production build I need to add the correct handlers.我想知道是不是因为现在我正在运行生产版本,所以我需要添加正确的处理程序。 But as mentioned above, I have tried dozens of combinations of various answers on the internet to no avail.但是如上所述,我在互联网上尝试了数十种各种答案的组合,但均无济于事。

Here's another standard app.yaml I tried:这是另一个标准 app.yaml 我试过了:

runtime: nodejs16

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 2

handlers:
  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

  - url: /
    static_files: build/index.html
    upload: build/index.html

  - url: /
    static_dir: build

Is it something to do with one of my packages?这与我的一个包裹有关吗? If so, which one?如果有,是哪一个? There aren't any specials ones that I know of...我所知道的没有什么特别的...

I also added this to my package.json, but it didn't do anything either:我还将它添加到我的 package.json 中,但它也没有做任何事情:

"start": "PORT=8080 react-scripts start",

EDIT 3 I have tried these posts: Error: Cannot find module '/workspace/server.js' could not find module workspace/server.js Error: Cannot find module '/workspace/server.js' upon node js deploy on google app engine https://medium.com/@calebmackdaven/so-you-want-to-start-using-google-cloud-ce9054e84fa8编辑 3我试过这些帖子: 错误:找不到模块'/workspace/server.js' 找不到模块工作区/server.js 错误:在谷歌应用程序上部署节点js时找不到模块'/workspace/server.js'引擎https://medium.com/@calebmackdaven/so-you-want-to-start-using-google-cloud-ce9054e84fa8

This app.yaml built on cloud build;此应用程序.yaml 基于云构建; however, I now get a new error "The requested URL / was not found on this server.":但是,我现在收到一个新错误“在此服务器上找不到请求的 URL /。”:

runtime: nodejs16

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 2

handlers:
  - url: /static/js/(.*)
    static_files: build/static/js/\1
    upload: build/static/js/(.*)
  - url: /static/css/(.*)
    static_files: build/static/css/\1
    upload: build/static/css/(.*)
  - url: /static/media/(.*)
    static_files: build/static/media/\1
    upload: build/static/media/(.*)
  - url: /(.*\.(json|ico))$
    static_files: build/\1
    upload: build/.*\.(json|ico)$
  - url: /
    static_files: build/index.html
    upload: build/index.html
  - url: /.*
    static_files: build/index.html
    upload: build/index.html
  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

My logs say:我的日志说:

Static file referenced by handler not found: build/index.html

EDIT 4 I tried a different cloudbuild.yaml:编辑 4我尝试了不同的 cloudbuild.yaml:

steps:

- name: node
  entrypoint: npm
  args: ['install']

- name: node
  entrypoint: npm
  args: ['run', 'build']

- name: 'bash'
  args: ['gcloud app deploy']

However, now the error I get in my npm run build stage is:但是,现在我在 npm 运行构建阶段遇到的错误是:

Error message "error:0308010C:digital envelope routines::unsupported"

I checked out this answer , so I tried a different node version 14 and still got the same issue.我检查了这个答案,所以我尝试了不同的节点版本 14,但仍然遇到同样的问题。 I tried the following, but got the same error:我尝试了以下方法,但得到了同样的错误:

"start": "react-scripts --openssl-legacy-provider start"

Here's my error:这是我的错误:

Step #1: Error: error:0308010C:digital envelope routines::unsupported
Step #1:     at new Hash (node:internal/crypto/hash:67:19)
Step #1:     at Object.createHash (node:crypto:130:10)
Step #1:     at module.exports (/workspace/node_modules/webpack/lib/util/createHash.js:135:53)
Step #1:     at NormalModule._initBuildHash (/workspace/node_modules/webpack/lib/NormalModule.js:417:16)
Step #1:     at /workspace/node_modules/webpack/lib/NormalModule.js:452:10
Step #1:     at /workspace/node_modules/webpack/lib/NormalModule.js:323:13
Step #1:     at /workspace/node_modules/loader-runner/lib/LoaderRunner.js:367:11
Step #1:     at /workspace/node_modules/loader-runner/lib/LoaderRunner.js:233:18
Step #1:     at context.callback (/workspace/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
Step #1:     at /workspace/node_modules/babel-loader/lib/index.js:59:103 {
Step #1:   opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
Step #1:   library: 'digital envelope routines',
Step #1:   reason: 'unsupported',
Step #1:   code: 'ERR_OSSL_EVP_UNSUPPORTED'
Step #1: }
Step #1: 
Step #1: Node.js v17.1.0
Finished Step #1
ERROR
ERROR: build step 1 "node" failed: step exited with non-zero status: 1

Why is it attempting to use Node.js v17.1.0 when I specified v16 in the app.yaml?当我在 app.yaml 中指定 v16 时,为什么它试图使用 Node.js v17.1.0?

EDIT 5编辑 5

I tried specifying Node v16.13.0:我尝试指定节点 v16.13.0:

steps:
- name: node: "16.13.0"
  entrypoint: npm
  args: ['install']

- name: node: "16.13.0"
  entrypoint: npm
  args: ['run', 'build']

- name: "gcr.io/cloud-builders/gcloud"
  entrypoint: bash
  args: [gcloud app deploy]

However, it didn't build at all:但是,它根本没有构建:

Your build failed to run: failed unmarshalling build config cloudbuild.yaml: yaml: line 2: mapping values are not allowed in this context

So I tried adding a substitution:所以我尝试添加一个替换:

--- 
steps: 
  - 
    args: 
      - install
    entrypoint: npm
    name: "node= $_NODE_VERSION"
  - 
    args: 
      - run
      - build
    entrypoint: npm
    name: "node= $_NODE_VERSION"
  - 
    args: 
      - "gcloud app deploy"
    entrypoint: bash
    name: gcr.io/cloud-builders/gcloud
substitutions: 
  $_NODE_VERSION: v16.13.0

But I got:但我得到了:

Your build failed to run: generic::invalid_argument: invalid build: invalid build step name "node= ": could not parse reference: node=

And if I try node: "16.13.0", the error is similar:如果我尝试节点:“16.13.0”,错误类似:

Your build failed to run: failed unmarshalling build config cloudbuild.yaml: yaml: line 2: mapping values are not allowed in this context

Okay, that error was just due to spacing.好的,那个错误只是由于间距。 I tried updating my cloudbuild.yaml as follows:我尝试更新我的 cloudbuild.yaml 如下:

steps:
- name: node:16.13.0
  entrypoint: npm
  args: ['install']

- name: node:16.13.0
  entrypoint: npm
  args: ['run', 'build']

- name: "gcr.io/cloud-builders/gcloud"
  entrypoint: bash
  args: [gcloud app deploy]

Now I am able to build.现在我可以建造了。 However, now I get an issue with the gcloud command:但是,现在我遇到了 gcloud 命令的问题:

Step #2: bash: gcloud app deploy: No such file or directory

EDIT 6编辑 6

I'm going in circles.我在兜圈子。 My new error is the original one:我的新错误是原来的错误:

Error: Not Found
The requested URL / was not found on this server.

But at least I got the cloud build to build.但至少我得到了云构建。 So it must be my app.yaml or cloudbuild.yaml.所以它一定是我的 app.yaml 或 cloudbuild.yaml。

steps:
- name: node:16.13.0
  entrypoint: npm
  args: ['install']

- name: node:16.13.0
  entrypoint: npm
  args: ['run', 'build']

- name: "gcr.io/cloud-builders/gcloud"
  entrypoint: bash
  args: 
    - "-c"
    - |
        cp app.yaml ./build
        cd build
        gcloud app deploy
Step #2: bash: gcloud app deploy: No such file or directory

Solution I finally got it working, I was changing directory to build.解决方案我终于让它工作了,我正在更改要构建的目录。 but shouldn't have been.但不应该。 So here are my working cloudbuild.yaml and app:yaml files:所以这是我的工作 cloudbuild.yaml 和 app:yaml 文件:

cloudbuild.yaml cloudbuild.yaml

steps:
- name: node:16.13.0
  entrypoint: npm
  args: ['install']

- name: node:16.13.0
  entrypoint: npm
  args: ['run', 'build']

- name: "gcr.io/cloud-builders/gcloud"
  entrypoint: bash
  args: 
    - "-c"
    - |
        cp app.yaml ./build
        gcloud app deploy

app.yaml app.yaml

--- 
handlers: 
  - 
    secure: always
    static_dir: build/static
    url: /static
  - 
    secure: always
    static_files: build/\1
    upload: build/.*\.(json|ico|js)$
    url: /(.*\.(json|ico|js))$
  - 
    secure: always
    static_files: build/index.html
    upload: build/index.html
    url: .*
manual_scaling: 
  instances: 1
runtime: nodejs16

Solution I finally got it working, I was changing directory to build.解决方案我终于让它工作了,我正在更改要构建的目录。 but shouldn't have been.但不应该。 So here are my working cloudbuild.yaml and app:yaml files:所以这是我的工作 cloudbuild.yaml 和 app:yaml 文件:

cloudbuild.yaml cloudbuild.yaml

steps:
- name: node:16.13.0
  entrypoint: npm
  args: ['install']

- name: node:16.13.0
  entrypoint: npm
  args: ['run', 'build']

- name: "gcr.io/cloud-builders/gcloud"
  entrypoint: bash
  args: 
    - "-c"
    - |
        cp app.yaml ./build #not sure if this is necessary
        gcloud app deploy

app.yaml app.yaml

--- 
handlers: 
  - 
    secure: always
    static_dir: build/static
    url: /static
  - 
    secure: always
    static_files: build/\1
    upload: build/.*\.(json|ico|js)$
    url: /(.*\.(json|ico|js))$
  - 
    secure: always
    static_files: build/index.html
    upload: build/index.html
    url: .*
manual_scaling: 
  instances: 1
runtime: nodejs16

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:找不到模块“/workspace/server.js” - Error: Cannot find module '/workspace/server.js' 在server.js中找不到模块 - cannot find module in server.js 为什么我得到这个“找不到模块 server.js”? - why am I getting this "Cannot find module server.js"? 错误 [ERR_MODULE_NOT_FOUND]:找不到从 F:\Document\My Project\NODE JS\Sample 1\tinder-backend\server.js 导入的包 'express' - Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'express' imported from F:\Document\My Project\NODE JS\Sample 1\tinder-backend\server.js 如何使用server.js获取应用程序的路径 - How to get the path of the app with server.js Razzle-在构建文件夹中运行server.js时未找到React错误 - Razzle - React not found Error on running server.js in build folder Vercel 上的部署错误:找不到模块“/vercel/workpath0/.next/server/scripts/build-rss.js” - Deplopyment Error on Vercel: Cannot find module '/vercel/workpath0/.next/server/scripts/build-rss.js' ./src/client-app/index.js 中的错误 - 模块构建失败:错误:找不到模块“@babel/core” - ERROR in ./src/client-app/index.js - Module build failed: Error: Cannot find module '@babel/core' 设置 server.js - Setting up server.js 错误:找不到模块 - webpack-dev-server.js - Error: Cannot find module - webpack-dev-server.js
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM