Celery monitoring on Heroku - heroku

I have a worker process in a Heroku app that runs Celery (celery worker --app=myapp). What should I use to monitor workers? Is there something built-in in Django? Or is there some 3rd-party service?

You could use Flower, a real-time web based monitor and administration tool for Celery. This repo contains a guide on how to run it on Heroku.
Configure the app by providing your broker url and a password for logging into Flower:
heroku config:set BROKER_URL=redis://...
heroku config:set FLOWER_BASIC_AUTH="username:password"

Related

Heroku CLI gives "No Redis instances found" yet I have a redis cloud addon running and usable

I'm learning redis and have it working from a java app. I'm trying to use the heroku redis:cli -a myAppName command to connect with it directly but it says "No Redis instances found".
When I do heroku apps it lists myAppName so I know it's valid.
heroku redis:info -a myAppName doesn't return anything.
The heroku docs don't seem to be accurate as they all leave out the -a flag which the cli tells me is required. Outside of that I don't know what I've missed.
You are looking at documentation for Heroku Redis, a hosted Redis service that Heroku itself provides. If you wish to use Heroku Redis, you can provision it for your app using like so:
heroku addons:create heroku-redis:hobby-dev -a your-app-name
Pricing for Heroku Redis can be found here. The Hobby Dev plan used in the previous command is free.
There are also other Redis providers that can be provisioned this way, including Redis Enterprise Cloud. Or you can use existing hosted Redis server. But with these options you won't be able to interact with the service using heroku redis commands. Use whatever tooling those providers offer.

Is it possible to deploy more then one Strapi.io app on the same Heroku dyno?

I read more tutorials about deploy Strapi to Heroku and all of them talks about deployng your Strapi app to Heroku. But in addition I would like to understand if it is possible to deploy for example 2 different Strapi applications, to the same Heroku dyno and if it has any disadvantage or not.
Yes, it's possible.
You need to use Nginx Virtual Host as defined in Strapi Nginx Proxying documentation.
It's mentioned in Amazon AWS part of the documentation.
https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-with-http-2-support-on-ubuntu-18-04

Server Client Communcation between heroku apps

I have a server application built on nodejs and socket.io and a client application built with typescript and socket.io.
The two apps are separate git repos.
Can I host them as separate apps on heroku and allow communication between them or do they need to share repo/heroku app?
As heroku allow to open single port per application. You have to use separate heroku apps for:
Nodejs backend which includes socket.io
Front client application which built on Typescript.
You can share share Repo if you're not connected Git with Heroku Repo.
But in case you connected Github repo with Heroku app you need a separate Repo for both.

Can I deploy a server to Heroku without a client?

I have built a backend server application without a frontend to it. Can I still deploy it to heroku ?
Sure. Heroku only hosts apps.
As long as your backend server application listens on a specified port, and is able to receive and respond to HTTP requests, you can host it on Heroku.

django server replies synchronously to multiple ajax get requests

I have a web page who sends multiple ajax get request to a django server.
The server does some internet crawling for each request it gets and returns a response to the client once it finishes.
It seems that the server replies to the requests one after another.
I'm considering to send each request to a Celery worker to make the server's responses asynchronous but I'm not sure if it will solve the problem.
Also I'm using django on heroku and not sure how to combine celery with django on heroku.
The Heroku Django tutorial app uses gunicorn as the server, as you can see here:
https://github.com/heroku/python-getting-started/blob/master/Procfile
There is no special gunicorn config in the tutorial app, so you are running with gunicorn default settings. You can see what they are here:
http://docs.gunicorn.org/en/stable/settings.html#worker-processes
You'll note that this means you have a single worker process, of the sync type (i.e. no greenlets magic to enable concurrency within the single Python process)
It does say you can scale gunicorn to use multiple processes (still on a single Heroku dyno) by setting the WEB_CONCURRENCY environment variable, on Heroku this is easily done from your local shell using the cli tools:
$ heroku config:set WEB_CONCURRENCY=4
Gunicorn docs suggest setting this to "A positive integer generally in the 2-4 x $(NUM_CORES) range." Your basic Heroku dyno will be a single core.

Resources