From 4b18b2c87361ebd86c93f060416499b5bcfd4270 Mon Sep 17 00:00:00 2001 From: Miguel Grinberg Date: Tue, 18 Jul 2017 07:55:55 -0700 Subject: [PATCH] Chapter 17: Heroku support with Waitress (17c-waitress) --- Procfile | 1 + app/__init__.py | 4 ++++ config.py | 21 +++++++++++++++++++++ requirements.txt | 3 +++ requirements/heroku.txt | 4 ++++ 5 files changed, 33 insertions(+) create mode 100644 Procfile create mode 100644 requirements.txt create mode 100644 requirements/heroku.txt diff --git a/Procfile b/Procfile new file mode 100644 index 000000000..e28b70289 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: waitress-serve --port=$PORT flasky:app diff --git a/app/__init__.py b/app/__init__.py index 4c4c16c92..a0d325a37 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -29,6 +29,10 @@ def create_app(config_name): login_manager.init_app(app) pagedown.init_app(app) + if app.config['SSL_REDIRECT']: + from flask_sslify import SSLify + sslify = SSLify(app) + from .main import main as main_blueprint app.register_blueprint(main_blueprint) diff --git a/config.py b/config.py index dbe76968e..6e0e2b515 100644 --- a/config.py +++ b/config.py @@ -13,6 +13,7 @@ class Config: FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]' FLASKY_MAIL_SENDER = 'Flasky Admin ' FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN') + SSL_REDIRECT = False SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_RECORD_QUERIES = True FLASKY_POSTS_PER_PAGE = 20 @@ -66,10 +67,30 @@ def init_app(cls, app): app.logger.addHandler(mail_handler) +class HerokuConfig(ProductionConfig): + SSL_REDIRECT = True if os.environ.get('DYNO') else False + + @classmethod + def init_app(cls, app): + ProductionConfig.init_app(app) + + # handle reverse proxy server headers + from werkzeug.contrib.fixers import ProxyFix + app.wsgi_app = ProxyFix(app.wsgi_app) + + # log to stderr + import logging + from logging import StreamHandler + file_handler = StreamHandler() + file_handler.setLevel(logging.INFO) + app.logger.addHandler(file_handler) + + config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, + 'heroku': HerokuConfig, 'default': DevelopmentConfig } diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..e8858f6cb --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +# this requirements file is used by Heroku +# requirements for other configurations are located in the requirements subdirectory +-r requirements/heroku.txt diff --git a/requirements/heroku.txt b/requirements/heroku.txt new file mode 100644 index 000000000..3d3e394dc --- /dev/null +++ b/requirements/heroku.txt @@ -0,0 +1,4 @@ +-r prod.txt +Flask-SSLify==0.1.5 +waitress==1.0.2 +psycopg2==2.7.3