How to force npm install on elastic beanstalk node 16? - amazon-elastic-beanstalk

I have issues on elastic beanstalk because of some peer dependencies. In EB logs, I can see npm install --production is failing.
How can I customize EB platform to either let me run install by myself (i was able to do this with Procfile on node 14 platform) or pass flags such as --force to the command.
I am on the latest node 16 platform (using npm 8)

Easy way for me was to add npm_config_force=true to Software environment variables in EB.

Related

node-gyp configure "binding.gyp not found (cwd: D:\MyProject) while trying to load binding.gyp"

I searched many and installed all necessary packages they said,
npm install --global --production windows-build-tools
node-gyp --python /path/to/python2.7
I have vs2017 installed in my win10 pc, I am using last versions of nodes tools
node -v //8.12.0
npm -v //6.4.1
I tried remove nodejs and reinstall to start fresh install but stuck in this step each,
here my .npmrc content;
strict-ssl=false
node_gyp=node C:\Users\ASUS\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js
msvs_version=2015
python=C:\Python27\python.exe
GYP_MSVS_VERSION=2015
ss of powershell, (node-gyp configure)
it looks for a file called 'binding.pyp'
If I add that file manually errormessage changes.. but other examples dont create any file they just install packges and run..
How can I fix this I searched on net many and did all advices(install ms build tools set msvs version 2017)

Continue after reboot Linux custom script - Azure ARM template

I am trying to build ARM JSON template and facing a problem with custom script extension and request for your help.
This is the sample script that I am executing as a part of virtual machine extensions (Linux).
#!/usr/bin/bash
export AZURE_STORAGE_ACCOUNT="$1"
export AZURE_STORAGE_ACCESS_KEY="$2"
AZURE_STORAGE_CONTAINER="$3"
yum update -y
reboot
yum install -y epel-release
yum install -y gcc gcc-c++ kernel-devel ksh m4 sshpass nodejs npm
With this script the VM was able to install updates and reboot. However the command "yum install -y epel-release" and following commands were not executed. And also while deployment this operation hangs and timeouts.
Can you help suggest how to solve this situation using JSON ARM template or custom script extension or using any Linux workaround ?
probably powershell dsc can help you achieve that (configure certain properties to force configuration to continue after reboot), or split your configuration into 2 scripts and deploy them independently of each other, so the first script reboots the machine, and after that second script should start working as soon as the VM becomes available and waagent talk to Azure.

xcrun: error: unable to find utility "xcode-select", not a developer tool or in PATH

when I execute the command “pod update”,I found some problems in this process.The detail information is as follows.
$ pod update
Update all pods
Updating local specs repositories
CocoaPods 1.1.0.beta.1 is available.
To update use: gem install cocoapods --pre
[!] This is a test version we'd love you to try.
For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.
Analyzing dependencies
sh: line 1: 4173 Segmentation fault: 11 /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -sdk / -find xcode-select 2> /dev/null
xcrun: error: unable to find utility "xcode-select", not a developer tool or in PATH
Downloading dependencies
Using AFNetworking (3.1.0)
Using MJExtension (3.0.12)
Using ReactiveCocoa (2.1.8)
Using SDWebImage (3.8.1)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There are 4 dependencies from the Podfile and 4 total pods installed.
$
I was struck by the problem very long .I hope for your help!Thank you in advance!
opened Xcode.
Preferences
Locations
Selected the Command Lin Tools
credit : http://www.jianshu.com/p/6b56aba2ee05

Running gulp in dreamhost VPS

Since the last dreamhost update which banned VPS users from accessing root/administrator. I am wondering how to do i install GULP in my hosting as it looks like we need admin access to install that and which dreamhost clearly denies it to give access.
So the problem is there are several tasks i need on my server to accomplish via GULP.
Do we have any alternative/Solution to this problem? (except changing the hosting service :))
I'm fed up of not being able to implement my production code in production environment.
thanks
DreamHost VPS are managed servers, they try to strike a balance between giving more computing power and isolation to customers (as opposed to shared hosting) while taking some management burden off of customers hands. This results in a compromise where you don't have to care about the underlying OS and basic services at all, and focus on your applications... but you're limited somewhat to what you can install on the machine.
The good news is that you can manage npm packages as an unprivileged user. While I am not a node expert, I have managed to upgrade npm and install gulp and all dependencies on my local user.
I first created a new dir for my version of npm (mkdir npm) then set the npm prefix to it
$ npm config set prefix ~/npm
Then it's time to install a newer version of npm in that dir:
$ npm install -g npm
After that's done, update the $PATH variable in your .bash_profile and in the current session, too export PATH="$HOME/npm/bin:$PATH" and confirm with a which npm that the npm command bash will execute is /home/$YOUR_VPS_USER/npm/bin/npm.
Now you can install the rest:
npm install -g bower
npm install -g grunt-cli
npm install -g gulp
npm install -g yo
If you need to have more power and accept the responsibilities of running an unmanaged server, DreamHost Cloud is more for you though.

NPM doesn't install module dependencies when deploying a Grunt app to heroku

I'v made a static single page site using grunt. I'm now trying to deploy it to heroku using the heroku-buildpack-nodejs-grunt for node grunt.
Below is a pic of my root directory:
Here's my Gruntfile package.json:
Procfile:
web: node index.html
When I run $ git push heroku master it gets to the Gruntfile and fails:
-----> Found Gruntfile, running grunt heroku:production task
>> Local Npm module "grunt-contrib-uglify" not found. Is it installed?
The above errors proceed to list all local NPM modules as not found. If I list all loadNpmTasks instead of using "load-grunt-tasks", I get the exact same error.
When I $ heroku logs I get:
Starting process with command `node web.js`
Error: Cannot find module '/app/web.js'
Can anyone see where I've gone wrong?
For anyone passing by here, I wasn't able to solve the problem. This is where I got to:
In my Gruntfile, I moved npm modules from devDependencies to dependencies. Heroku was then able to install these dependencies.
However, when Heroku ran the tasks, it stops at the haml task w/ error "You need to have Ruby and Haml installed and in your PATH for this task to work". Adding ruby & haml to the Gruntfile as engines did not work.
The only thing I can think of is that maybe Heroku installs your devDependencies first, tries to run Grunt, but since it didn't install load-grunt-tasks yet, you don't get the grunt.loadNpmTasks( 'grunt-contrib-uglify' ); line (which load-grunt-tasks does for you), and thus Grunt can't find the package.
Can you try changing your Gruntfile to explicitly list out all npm modules using the grunt.loadNpmTasks() method?
EDIT:
Just remembered another thing I had to do:
heroku labs:enable user-env-compile -a myapp
heroku config:set NODE_ENV=production
(Obviously replacing myapp with your Heroku app name.)
This makes Heroku allow user set environment variables and then sets your server to production. Try that, and set your dependencies and devDependencies as you had them originally (just to see if it works).
I am coming pretty late to the game here but I have used a couple methods and thought I would share.
Option 1: Get Heroku to Build
This is not my favorite method because it can take a long time but here it is anyway.
Heroku runs npm install --production when it receives your pushed changes. This only installs the production dependencies.
You don't have to change your environment variables to install your dev dependencies. npm install has a --dev switch to allow you to do that.
npm install --dev
Heroku provides an article on how you can customize your build. Essentially, you can run the above command as a postinstall script in your package.json.
"scripts": {
"start": "node index.js",
"postinstall": "npm install --dev && grunt build"
}
I think this is cleaner than putting dev dependencies in my production section or changing the environment variables back and forth to get my dependencies to build.
Also, I don't use a Procfile. Heroku can run your application by calling npm start (at least it can now almost two years after the OP). So as long as you provide that script (as seen above) Heroku should be able to start your app.
As far as your ruby dependency, I haven't attempted to install a ruby gem in my node apps on Heroku but this SO answer suggests that you use multi buildpack.
Option 2: Deploy Your Dependencies
Some argue that having Heroku build your application is bad form. They suggest that you should push up all of your dependencies. If you are like me and hate the idea of checking in your node_modules directory then you could create a new branch where you force add the node_modules directory and then deploy that branch. In git this looks like:
git checkout -b deploy
git add -f node_modules/
git commit -m "heroku deploy"
git push heroku --force deploy:master
git checkout master
git branch -D deploy
You could obviously make this into a script so that you don't have to type that every time.
Option 3: Do It All Yourself
This is my new favorite way to deploy. Heroku has added support for slug deploys. The previous link is a good read and I highly recommend it. I do this in my automated build from Travis-CI. I have some custom scripts to tar my app and push the slug to Heroku and its fast.
I faced a similar problem with Heroku not installing all of my dependencies, while I had no issue locally. I fixed it by running
heroku config:set USE_NPM_INSTALL=true
into the path, where I deployed my project from. This instructs Heroku to install your dependencies using npm install instead of npm ci, which is the default! From Heroku dev center:
"Heroku uses the lockfiles, either the package-lock.json or yarn.lock, to install the expected dependency tree, so be sure to check those files into git to ensure the same dependency versions across environments. If you are using npm, Heroku will use npm ci to set up the build environment."