You put your Django project on Heroku and you register a custom domain name for it at GoDaddy. How to assign this domain name to your project on Heroku?
Follow the guide above to deploy your Django project on Heroku.
In Flask, you can ask the client’s IP address with
request.remote_addr . If you try to print this value on Heroku, you will get strange IP addresses that have nothing to do with the client’s IP.
It’s because your app. at Heroku is behind proxies and your app. will see the proxies’ IP, not the real client’s IP.
Fortunately there is a fix for this problem here: http://flask.pocoo.org/docs/deploying/others/#proxy-setups. You just need to insert these two lines in the production code:
from werkzeug.contrib.fixers import ProxyFix app.wsgi_app = ProxyFix(app.wsgi_app)
You have a project that you develop on your local machine and you deploy it on Heroku for instance. The two environments require different settings. For example, you test your app. with SQLite but in production you use PostgreSQL. How can the application configure itself to its environment?
I show you how to do it with Flask.
In your project folder:
$ heroku config:set HEROKU=1
It will create an environment variable at Heroku. These environment variables are persistent – they will remain in place across deploys and app restarts – so unless you need to change values, you only need to set them once.
Then create a
config.py file in your project folder:
import os class Config(object): DEBUG = False TESTING = False DATABASE_URI = 'sqlite://:memory:' class ProductionConfig(Config): """ Heroku """ REDIS_URI = os.environ.get('REDISTOGO_URL') class DevelopmentConfig(Config): """ localhost """ DEBUG = True REDIS_URI = 'redis://localhost:6379' class TestingConfig(Config): TESTING = True
Of course, you will have to customize it with your own settings.
Then, in your main file:
... app = Flask(__name__) if 'HEROKU' in os.environ: # production on Heroku app.config.from_object('config.ProductionConfig') else: # development on localhost app.config.from_object('config.DevelopmentConfig') ...
Now, if you want to access the configuration from different files of the project, use this:
from flask import current_app as app ... app.config['MY_SETTINGS']
Let’s see how to use Redis for instance. Apply the same idea with other databases too. Opening and closing can go in the
from flask import g import redis @app.before_request def before_request(): g.redis = redis.from_url(app.config['REDIS_URI']) @app.teardown_request def teardown_request(exception): pass # g.redis doesn't need to be closed explicitly
If you need to access
redis from other files, just import
g and use