Even viewing the “Can’t find Chrome Binary” topic, wasn’t enough to solve my problem.
I have an API with a web crawler in go using chromedp, but each time I call the request with it, returns me the error:
exec: “google-chrome”: executable file not found in $PATH
this is my render-build.sh:
set -o errexit
STORAGE_DIR=/opt/render/project/.render
if [[ ! -d $STORAGE_DIR/chrome ]]; then echo "...Downloading Chrome" mkdir -p $STORAGE_DIR/chrome cd $STORAGE_DIR/chrome wget -P ./ https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb dpkg -x ./google-chrome-stable_current_amd64.deb $STORAGE_DIR/chrome rm ./google-chrome-stable_current_amd64.deb cd $HOME/project/src # Make sure we return to where we were else echo "...Using Chrome from cache" fi
# be sure to add Chromes location to the PATH as part of your Start Command # export PATH="${PATH}:/opt/render/project/.render/chrome/opt/google/chrome/" # echo $STORAGE_DIR # echo $PATH
go build -ldflags '-s -w' -o ./app main.go
My build command: ./render-build.sh
My start command: export PATH="${PATH}:/opt/render/project/.render/chrome/opt/google/chrome/"; ./app
Could someone help me? I intend to create after this a medium article about render + go + gin + chromedp
Ok, since no one has shown up, I start testing without a shell using the “render-build.sh” and now “render-start.sh”.
This leads me to a strange conclusion: in a “build time” I have chrome but in “start time” I don’t.
I made a test, and sent everything that was in “render-build.sh” to “render-start.sh”.
And then, boom, it worked, makes my compile time bigger and bugged? Maybe, but at least works.
(You only have to correct the “cd $HOME” part to your project path, just add an “echo $(pwd)” in the second line to see.
Compiling a Go app and installing Chrome at runtime is going to be really inefficient, especially on a free instance type which spins-down after 15 minutes of inactivity. Every time it spins back up, it’ll be doing it doing all that work again, and will likely have less resource than a build container.
I’m not quite sure why you’re seeing the issue from your app. I’ve created a barebones Node app (based on the Render Express example), to double-check this build script (which seems like it’s taken from my gist). That repo is here GitHub - BigAlRender/chrome-install-test: chrome-test
I tried with both raw commands in the Start Command, and setting it to the start script in the repo. I also added logging the PATH from Node. All scenarios logged the PATH with Chrome install path included. I also run which google-chrome and that would also return the full path to the binary.
For example:
Mar 9 04:17:13 PM ==> Starting service with './render-start.sh'
Mar 9 04:17:13 PM === Checking for Chrome...
Mar 9 04:17:13 PM $PATH is:
Mar 9 04:17:13 PM /opt/render/project/nodes/node-19.7.0/bin:/opt/render/project/src/node_modules/.bin:/opt/render/project/src/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/render/project/.render/chrome/opt/google/chrome
Mar 9 04:17:13 PM
Mar 9 04:17:13 PM which google-chrome:
Mar 9 04:17:13 PM /opt/render/project/.render/chrome/opt/google/chrome/google-chrome
Mar 9 04:17:13 PM
Mar 9 04:17:14 PM env PATH (in Node): /opt/render/project/nodes/node-19.7.0/bin:/opt/render/project/src/node_modules/.bin:/opt/render/project/src/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/render/project/.render/chrome/opt/google/chrome
Mar 9 04:17:14 PM Example app listening on port 10000!
Mar 9 04:17:23 PM Your service is live 🎉
One tiny thing that may be incorrect in your message is the trailing / on the export PATH... but I’m not sure if that would be enough to cause the error you shared.