2017-01-02 50 views
1

我试图几个小时,现在都留下不知道......也许你有一些:-)Herkoku节点部署与子文件夹

我用react-starter-kit作为我的反应,应用程序和gitlab为我的仓库。我已启用gitlab-ci部署并将我的应用程序发布到heroku。

那么好吧,gitlab-ci作品...

但反应-初学者工具包使用/build文件夹,为所有的资产和精缩等应用。

我怎么能通过gitlab-ci在heroku上获得一个可运行的应用程序? 我已经添加了Procfile与此内容: web: node ./build/server.js

Heroku的日志输出如下:

2017-01-02T16:57:54.655686+00:00 heroku[web.1]: State changed from crashed to starting 
2017-01-02T16:57:58.721166+00:00 heroku[web.1]: Starting process with command `node ./build/server.js` 
2017-01-02T16:58:00.987643+00:00 heroku[web.1]: Process exited with status 1 
2017-01-02T16:58:00.995852+00:00 heroku[web.1]: State changed from starting to crashed 
2017-01-02T16:58:00.997060+00:00 heroku[web.1]: State changed from crashed to starting 
2017-01-02T16:58:00.833548+00:00 app[web.1]: module.js:471 
2017-01-02T16:58:00.833561+00:00 app[web.1]:  throw err; 
2017-01-02T16:58:00.833562+00:00 app[web.1]: ^
2017-01-02T16:58:00.833563+00:00 app[web.1]: 
2017-01-02T16:58:00.833564+00:00 app[web.1]: Error: Cannot find module '/app/build/server.js' 
2017-01-02T16:58:00.833565+00:00 app[web.1]:  at Function.Module._resolveFilename (module.js:469:15) 
2017-01-02T16:58:00.833566+00:00 app[web.1]:  at Function.Module._load (module.js:417:25) 
2017-01-02T16:58:00.833567+00:00 app[web.1]:  at Module.runMain (module.js:604:10) 
2017-01-02T16:58:00.833567+00:00 app[web.1]:  at run (bootstrap_node.js:394:7) 
2017-01-02T16:58:00.833568+00:00 app[web.1]:  at startup (bootstrap_node.js:149:9) 
2017-01-02T16:58:00.833569+00:00 app[web.1]:  at bootstrap_node.js:509:3 
2017-01-02T16:58:07.230342+00:00 heroku[web.1]: Starting process with command `node ./build/server.js` 
2017-01-02T16:58:10.416437+00:00 heroku[web.1]: State changed from starting to crashed 
2017-01-02T16:58:10.398239+00:00 heroku[web.1]: Process exited with status 1 
2017-01-02T16:58:10.271567+00:00 app[web.1]: module.js:471 
2017-01-02T16:58:10.271583+00:00 app[web.1]:  throw err; 
2017-01-02T16:58:10.271584+00:00 app[web.1]: ^
2017-01-02T16:58:10.271584+00:00 app[web.1]: 
2017-01-02T16:58:10.271585+00:00 app[web.1]: Error: Cannot find module '/app/build/server.js' 
2017-01-02T16:58:10.271586+00:00 app[web.1]:  at Function.Module._resolveFilename (module.js:469:15) 
2017-01-02T16:58:10.271586+00:00 app[web.1]:  at Function.Module._load (module.js:417:25) 
2017-01-02T16:58:10.271587+00:00 app[web.1]:  at Module.runMain (module.js:604:10) 
2017-01-02T16:58:10.271588+00:00 app[web.1]:  at run (bootstrap_node.js:394:7) 
2017-01-02T16:58:10.271588+00:00 app[web.1]:  at startup (bootstrap_node.js:149:9) 
2017-01-02T16:58:10.271588+00:00 app[web.1]:  at bootstrap_node.js:509:3 

要完成所有信息,我gitlab慈内容:

image: node:latest 

stages: 
    - deploy 

before_script: 
    - npm install 

deploy: 
    stage: deploy 
    only: 
    - master 
    script: 
    - npm run build -- --release 
    - apt-get update -yq 
    - apt-get install ruby-dev rubygems -y 
    - gem install dpl 
    - dpl --provider=heroku --app=nice-app --api-key=$HEROKU_API_KEY 

请帮帮我!谢谢!

UPDATE:

我的文件夹结构如下:

根的package.json的
├── /build/ 
│ ├── /content/ 
│ ├── /public/ 
│ ├── /assets.js 
│ ├── /package.json 
│ ├── /server.js 
├── /docs/ 
├── /node_modules/ 
├── /public/ 
├── /src/ 
│ ├── /components/ 
│ ├── /core/ 
│ ├── /data/ 
│ ├── /routes/ 
│ ├── /client.js 
│ ├── /config.js 
│ └── /server.js 
├── /test/ 
├── /tools/ 
└── package.json 

内容是这样的:

{ 
    "private": true, 
    "engines": { 
    "node": ">=6.5", 
    "npm": ">=3.10" 
    }, 
    "dependencies": { 
    ... 
    }, 
    "devDependencies": { 
    ... 
    }, 
    "babel": { 
    "presets": [ 
     "react", 
     "node5", 
     "stage-0" 
    ], 
    "env": { 
     "test": { 
     "plugins": [ 
      "rewire" 
     ] 
     } 
    } 
    }, 
    "eslintConfig": { 
    "parser": "babel-eslint", 
    "extends": "airbnb", 
    "globals": { 
     "__DEV__": true 
    }, 
    "env": { 
     "browser": true 
    }, 
    "rules": { 
     "arrow-parens": "off", 
     "generator-star-spacing": "off", 
     "import/extensions": "off", 
     "import/no-extraneous-dependencies": "off", 
     "react/forbid-prop-types": "off", 
     "react/jsx-filename-extension": "off", 
     "react/no-danger": "off", 
     "react/no-unused-prop-types": "off" 
    } 
    }, 
    "stylelint": { 
    "extends": "stylelint-config-standard", 
    "rules": { 
     "string-quotes": "single", 
     "property-no-unknown": [ 
     true, 
     { 
      "ignoreProperties": [ 
      "composes" 
      ] 
     } 
     ], 
     "selector-pseudo-class-no-unknown": [ 
     true, 
     { 
      "ignorePseudoClasses": [ 
      "global", 
      "local" 
      ] 
     } 
     ] 
    } 
    }, 
    "scripts": { 
    "lint:js": "eslint src tools", 
    "lint:css": "stylelint \"src/**/*.{css,less,scss,sss}\"", 
    "lint": "npm run lint:js && npm run lint:css", 
    "test": "mocha \"src/**/*.test.js\" --require test/setup.js --compilers js:babel-register", 
    "test:watch": "npm run test -- --reporter min --watch", 
    "clean": "babel-node tools/run clean", 
    "copy": "babel-node tools/run copy", 
    "bundle": "babel-node tools/run bundle", 
    "build": "babel-node tools/run build", 
    "deploy": "babel-node tools/run deploy", 
    "render": "babel-node tools/run render", 
    "start": "babel-node tools/run start" 
    } 
} 

,并在build文件夹中的package.json看起来像这样:

{ 
    "private": true, 
    "engines": { 
    "node": ">=6.5", 
    "npm": ">=3.10" 
    }, 
    "dependencies": { 
    ... 
    }, 
    "scripts": { 
    "start": "node server.js" 
    } 
} 
+0

你可以分享你的文件夹结构和你的package.json吗? –

+0

我已将您的请求数据更新为我的帖子。希望它提前帮助和感谢。 – cqueiser

回答

1

因此,您可以在gitlab YAML文件中定义工件。这允许您从舞台到舞台传递构建的文件。

artifacts: 
    paths: 
    - node_modules/ 
    - build/ 

像这样。然而,当你将它传递给heroku的dpl库时,我发现它不会推送工件(仍然值得一提,因为你可以将构建阶段工件传递到测试阶段等)。

我对节点应用程序所做的操作是将"postinstall"脚本添加到package.json npm在npm install完成后运行此脚本。

我不知道为什么你有两个package.json文件与你的生成文件夹中的一个。你可以只使用一个在你的项目的根目录,并添加这些脚本

"scripts": { 
    "start": "node build/server.js", 
    "postinstall": "npm run build" 
    "dev": "babel-node tools/run start", 
    "build": "babel-node tools/run build" 
    } 

的Heroku会自动运行npm run build它在安装后运行npm install你可以将多个在一起后,以及如果你愿意的话。

“postinstall”:“npm run lint & & npm run build”如果linter返回问题,但您希望得到想法,不知道是否要在构建上保释。

我目前正在努力与传递文物heroku角度。如果我解决这个问题,我会回来评论

+0

我得到它的工作原来,你可以添加多个图像到每个阶段。因此,例如,您可以在部署阶段使用红宝石图像。我从构建阶段部署工件的方式是删除.gitignore,然后添加所有工件,提交然后推送到heroku,如https://gist.github.com/maxmckenzie/7b838d2acb4188d3129f4578bdf36a32 – xam