Reputation: 11025
I have a form in which I submit images and they get uploaded to Firebase. I built the project locally, but when I push it to Heroku it breaks.
Express:
var gcs = require( 'multer-gcs' );
var storage = gcs({
filename : function( req, file, cb ) {
cb( null, file.fieldname + '-' + Date.now() );
},
bucket : 'mybucket.appspot.com', // Required : bucket name to upload
projectId : 'mybucket', // Required : Google project ID
keyFilename : './mybucket-firebase-adminsdk-4oyba-xee555bbgr.json', // Required : JSON credentials file for Google Cloud Storage
acl : 'publicread' // Optional : Defaults to private
});
const multer = require('multer');
var upload = multer({storage: storage});
app.post('/sell', upload.any(), homeController.postSellPage);
First Error Code (From Heroku Logs
):
Error: Cannot find module 'multer-gcs'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at Object.<anonymous> (/app/app.js:22:11)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at tryModuleLoad (module.js:446:12)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
So then I ran the following in order to update my package.json
: npm install multer-gcs --save
, and it installed, while giving me this message:
deprecated [email protected]: gcloud has been renamed to google-cloud. To get new features and bug fixes, you must use the new package.
I don't know what to do with that message, so I didn't do anything, except re-push to heroku, after committing the new package.json
. I got the following issue:
Build failed
Outdated Yarn lockfile
Your application contains a Yarn lockfile (yarn.lock) which does not
match the dependencies in package.json. This can happen if you use npm
to install or update a dependency instead of Yarn.
Please run the following command in your application directory and check
in the new yarn.lock file:
$ yarn install
$ git add yarn.lock
$ git commit -m "Updated Yarn lockfile"
$ git push heroku master
https://kb.heroku.com/why-is-my-node-js-build-failing-because-of-an-outdated-yarn-lockfile
So I then ran yarn install
, but got
The engine "node" is incompatible with this module. Expected version "6.9.5".
Found incompatible module
Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
So I looked and in package.json I have the following, which includes the node 6.9.5
, so I think I'm ok in that regard.
"engines": {
"node": "6.9.5",
"npm": "4.6.1",
"yarn": "1.3.2"
},
I then ran yarn install --ignore-engines
, based on a posting about this same issue. That gave me the following:
/Users/user/path/node_modules/gcloud/node_modules/grpc: Command failed.
Exit code: 127
Command: ./node_modules/.bin/node-pre-gyp install --fallback-to-build
I tried running this command npm install --unsafe-perm
, based on another posting, but again this issue with grpc
.
I would love any help that is out there about how I might go about getting heroku to accept/run the build, as I'm stumped on this one. Please let me know if any clarification is needed.
As requested, the package.json
:
{
"name": "App Name",
"version": "0.0.2",
"description": "Amazing Application",
"engines": {
"node": "6.9.5",
"npm": "4.6.1",
"yarn": "1.3.2"
},
"repository": {
"type": "git",
"url": "https://github.com/amazing_app.git"
},
"author": "Example",
"license": "Example",
"scripts": {
"start": "node app.js",
"test": "mocha --reporter spec",
"postinstall": "npm rebuild node-sass"
},
"dependencies": {
"aws-sdk": "^2.46.0",
"bcrypt-nodejs": "^0.0.3",
"bluebird": "^3.4.7",
"body-parser": "^1.15.2",
"chalk": "^1.1.3",
"cheerio": "^0.22.0",
"clockwork": "^0.1.4",
"compression": "^1.6.2",
"connect-mongo": "^1.3.2",
"dotenv": "^4.0.0",
"errorhandler": "^1.4.3",
"express": "^4.14.0",
"express-flash": "^0.0.2",
"express-session": "^1.14.2",
"express-status-monitor": "^0.1.5",
"express-validator": "^3.1.2",
"fbgraph": "^1.3.0",
"firebase": "^3.9.0",
"firebase-admin": "^4.2.1",
"github": "^9.2.0",
"grpc": "1.3.8",
"instagram-node": "^0.5.8",
"lastfm": "^0.9.2",
"lob": "^3.9.0",
"lusca": "^1.4.1",
"mongoose": "^4.6.6",
"morgan": "^1.7.0",
"multer": "^1.3.0",
"multer-gcs": "^1.0.2",
"node-base64-image": "^1.0.3",
"node-foursquare": "^0.3.0",
"node-linkedin": "^0.5.4",
"node-sass-middleware": "^0.11.0",
"nodemailer": "^3.1.7",
"passport": "0.3.2",
"passport-facebook": "^2.1.1",
"passport-github": "^1.1.0",
"passport-google-oauth": "^1.0.0",
"passport-instagram": "^1.0.0",
"passport-linkedin-oauth2": "^1.4.1",
"passport-local": "^1.0.0",
"passport-oauth": "^1.0.0",
"passport-openid": "^0.4.0",
"passport-twitter": "^1.0.4",
"paypal-rest-sdk": "^1.7.0",
"pug": "^2.0.0-beta6",
"request": "^2.78.0",
"stripe": "^4.12.0",
"tumblr.js": "^1.1.1",
"twilio": "^3.3.1-edge",
"twit": "^2.2.5",
"validator": "^7.0.0"
},
"devDependencies": {
"chai": "^3.5.0",
"eslint": "^3.9.1",
"eslint-config-airbnb-base": "^11.0.0",
"eslint-plugin-import": "^2.1.0",
"mocha": "^3.1.2",
"supertest": "^3.0.0"
},
"eslintConfig": {
"extends": "airbnb-base",
"rules": {
"comma-dangle": 0,
"consistent-return": 0,
"no-param-reassign": 0,
"no-underscore-dangle": 0,
"no-shadow": 0,
"no-console": 0,
"no-plusplus": 0
}
}
}
**NOTE:**It only breaks when I uncomment the stuff under Express
(shown above).
UPDATE:
The application will successfully post to Heroku when I use AWS with Multer var multerS3 = require('multer-s3');var s3 = new aws.S3({});
so it MUST be something with GCS and its dependencies
Upvotes: 0
Views: 767
Reputation: 146510
Follow the below steps
yarn.lock
fileAdd a new Aptfile
, with below content
gcc
build-essential
Add the apt
buildpack using below command
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt
Once you have done that, make a push again to heroku and now it should work
Upvotes: 1
Reputation: 81
Not 100% sure, but do you NEED to include the yarn.lock
file? I know it keeps your dependencies locked at the exact versions you used, but you should be fine without it in most instances?
If you were to git rm yarn.lock
heroku may like you better, in theory.
Also possible is that something in your node_modules is somehow broken (I'm not 100% sure how this happens exactly) or your yarn.lock
has something wrong. You might try to rm
both of those and re-run yarn install
Upvotes: 0