Heroku - How do I install/run g++ on a dyno? - heroku

I want to be able to call g++ from the command line in my nodejs app (as part of the server response to a POST request).

One possible solution would be to switch from deploying with Git + Heroku stack + Node buildpack to deploying your own Docker image (which can be based on Heroku's) using the Heroku Container Registry: https://devcenter.heroku.com/articles/container-registry-and-runtime

Related

No images to push error when container:push web in docker laravel heroku

I just learned about this problem so there is a bug that has not been fixed yet. For example "No images to push" when running the "heroku container:push web" command. Please help me, thanks you so much!!!
my err:
heroku.yml:
web.dockerfile:
Heroku provides two different methods for deploying with Docker that you're mixing up:
The container registry uses the heroku container:push command, but not heroku.yml.
If you wish to use this option, you need to rename your web.dockerfile to Dockerfile.web (or simply Dockerfile if it is your only image). You should also delete heroku.yml since it doesn't do anything.
Once your Dockerfile has been renamed, heroku container:push should be able to build and push your container.
Building with heroku.yml doesn't use heroku container:push.
If you wish to use this version, you'll need to follow a different set of instructions:
Make sure your heroku.yml file is committed
Tell Heroku to use the container stack:
heroku stack:set container
Deploy your code, e.g. by running git push heroku main
With this flow, Heroku will build your image from your heroku.yml file server-side.

heroku CLI auth by token

Every time after building and pushing docker image from Gitlab registry to Heroku registry I need to execute heroku container:release web to Heroku run image (release), but I wanna automate this
I added heroku CLI tool installation into gitlab-ci-yml, but I can't auth heroku CLI by token
When I try to set HEROKU_API_KEY=token and run heroku login I get an error Error: Cannot log in with HEROKU_API_KEY set
Also tried to do this with HEROKU_DEBUG on, but debugger info couldn't help me
I can't use ~/.netrc
Any way to auth heroku CLI or automate releasing docker images in heroku?
current gitlab-ci.yml:
before_script:
- apt install snapd
- snap install --classic heroku
- HEROKU_API_KEY=$HEROKU_API_TOKEN heroku login
- docker login -u $REGISTRY_UNAME -p $REGISTRY_PWD registry.gitlab.com
- docker login --username=_ --password=$HEROKU_PWD registry.heroku.com
script:
# a lot of tag & push lines
- heroku container:release web
If you have set the HEROKU_API_KEY environment variable, you don't have to log in again. The API key will be used for the Heroku CLI commands if present.
Make sure to use heroku authorizations:create to create never-expiring tokens. Check this out for a detailed explanation.
Ref: https://github.com/heroku/cli/issues/502#issuecomment-309099883
Note that the git commands like git push heroku master won't use the API key. See this for more info.
problem solved by changing account password that causes tokens changing and re-creating new token
And then run again HEROKU_API_KEY=token heroku container:release web with success

What is a good way to run a task whenever a Heroku app restarts?

Use case is to bust the cache.
What is a good way to run given code (or rake task) whenever a Ruby Heroku app is restarted (or deployed)?
There's no way to do this via the Heroku API far as I know. The Heroku Platform API doesn't support this.
What you can do (if you're fast, however!) is listen for a SIGTERM message in your code (that's what Heroku sends to your application process when it attempts to restart it) -- you can then fire off your script quickly.
Here's more information on SIGTERM on Heroku: https://devcenter.heroku.com/articles/dynos#graceful-shutdown-with-sigterm
If you're using some sort of CI, you can probably configure it there. Heres how to do it with CircleCI:
deployment:
production:
branch: production
commands:
- git push git#heroku.com:foo-bar-123.git $CIRCLE_SHA1:master
- heroku run rake <your task> --app <your app name>
If you're not using a CI you can still whip together a script that first does the git push to Heroku and then executes your cache busting task through heroku run (the app's bin/ folder would be an obvious place to put it).
Note: you can also use heroku run:detached, which will send output to your logs instead of stdout.
You can use "release" feature that allows you to run any command before a new release is deployed. https://devcenter.heroku.com/articles/release-phase
Define the command that should be run in your Procfile.
release: rake db:migrate
From documentation:
The release command is run immediately after a release is created, but before the release is deployed to the app’s dyno formation. That means it will be run after an event that creates a new release.

How can I deploy a shiny app to Heroku

I have a shiny app and want to deploy it to Heroku. I tried to follow the steps as mentioned in:
https://github.com/btubbs/heroku-buildpack-shiny
I created a git Git repository and put the R files into it. Then, I created an app in heroku and tell Heroku to use a custom buildpack for my app. But, I was not be able to enable Heroku websockets support.
Error is:
Couldn't find that feature.
I can't figure out how to deal with this problem. Is there any other way to deploy the shiny app to Heroku?
Have you seen https://github.com/virtualstaticvoid/heroku-docker-r?
Check out the example shiny app too. To specify additional dependencies, you can still use init.R.
To deploy using Docker, you might have to move your current Heroku app to a container stack. This can be done with the heroku stack:set CLI command:
$ heroku stack:set container
Here's a minimal example. Basically:
Create run.R file with the following
library(shiny)
port <- Sys.getenv('PORT')
shiny::runApp(
appDir = getwd(),
host = '0.0.0.0',
port = as.numeric(port)
)
Commit to git
Create a new heroku app with
heroku create --buildpack https://github.com/virtualstaticvoid/heroku-buildpack-r.git
git push heroku master
That's all there is to it.
Another way would be to deploy using Docker. I am not an expert, but it took me a couple of days to deploy an app using this soluation. Many tutorials exist and could bring you to achieving this.

How to use cloud code on parse server deployed on heroku?

I'm wondering how I can implement cloud code on a parse server I have deployed on heroku and MongoDB (the app is not connected to parse). I know there is a Command Line install tool to deploy cloud code with heroku, but doing that I have to create a new parse and heroku app instead of just adding it to the parse server I have deployed. How can I add this functions
I was having the same issue here is the way to put the latest code from 'cloud/main.js' to heroku from terminal
$ git add ./cloud/main.js
$ git commit -m "Changed configuration values"
$ git push heroku master
Now call your newly uploaded function from the app they will now work.
You have an hello test function in cloud/main.js:
Parse.Cloud.define('hello', function(req, res) {
res.success('Hi');
});
If you can successfully call it from your code, you're good to go. Just pushing your own functions to the Git repo should work. If you use the Github-Heroku integration and you've enabled automatic deploys, you don't have anything more to do, else do a manual deploy.

Resources