uWSGI Worth trying: waitress, twisted Not even once: runserver How many workers should I run? Start with WEB_CONCURRENCY Tune appropriately (more on this later) How should I serve static assets? Small scale: use Whitenoise Large scale, option A: S3 + CDN Large scale, option B: Whitenoise + CDN
for cost per process. You’ll need to measure: RAM per process number of required processes Math: cost_per_process = (dyno_ram / process_ram) * dyno_cost H/T: https://medium.com/swlh/running-a-high-traffic-rails-app-on-heroku-s-performance-dynos-d9e6833d34c
Gulp/Grunt/etc. …? $ heroku buildpacks === aqueous-shore-5792 Buildpack URL heroku/python $ heroku buildpacks:add --index 2 heroku/nodejs Buildpack added. Next release on aqueous-shore-5792 will use: 1. heroku/python 2. heroku/nodejs Run `git push heroku master` to create a new release using these buildpacks.
heroku master! To build without releasing, use a build app and copy slugs: https://devcenter.heroku.com/articles/platform-api-copying-slugs You can also create slugs from scratch: https://devcenter.heroku.com/articles/platform-api-deploying-slugs >>> source = h.post('https://api.heroku.com/apps/aqueous-shore-5792/sources').json() >>> requests.put(source['source_blob']['put_url'], data=open('foo.tgz').read()) >>> payload = {'source_blob': {'url': source['source_blob']['get_url'], ... 'version': 'abcd1234'}} >>> build = h.post('https://api.heroku.com/apps/aqueous-shore-5792//builds', data=json.dumps(payload)).json()