2018年10月30日火曜日

Pythonanywhereにflaskrをデプロイ

Flaskのチュートリアルにflaskrというミニブログアプリの作り方があります。

これをpythonanywhereにデプロイしたのですが、けっこうハマってしまいました。ドキュメントをきちんと読むのが大事ですね。

https://help.pythonanywhere.com/pages/Flask/
デプロイ時のローカルとの違いが書いてあります。

https://www.pythonanywhere.com/forums/topic/12889/
デプロイ時のWSGI設定が書いてあります。

①WSGI... py の設定

sys.path に使いたいpathを追加。

project_home = u'/home/user/flaskr'
if project_home not in sys.path:
    sys.path = [project_home] + sys.path

②create_app()を追加

from flaskr import create_app
application = create_app()  # noqa
を同じWSGI...pyに入れる。

ということが嵌ったポイントでした。

create_appは__init__.pyの中にあります。

import os
from flask import Flask
app = Flask(__name__, instance_relative_config=True)
def create_app(test_config=None):
    """Create and configure an instance of the Flask application."""
    app.config.from_mapping(
        # a default secret that should be overridden by instance config
        SECRET_KEY='dev',
        # store the database in the instance folder
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )
    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.update(test_config)
    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass
    @app.route('/hello')
    def hello():
        return 'Hello, World!'
    # register the database commands
    from flaskr import db
    db.init_app(app)
    # apply the blueprints to the app
    from flaskr import auth, blog
    app.register_blueprint(auth.bp)
    app.register_blueprint(blog.bp)
    # make url_for('index') == url_for('blog.index')
    # in another app, you might define a separate main index here with
    # app.route, while giving the blog blueprint a url_prefix, but for
    # the tutorial the blog will be the main index
    app.add_url_rule('/', endpoint='index')
    return app
if __name__ == '__main__':
    app.run(debug=True)

Staticファイルの変更が反映されないとき

https://help.pythonanywhere.com/pages/DebuggingStaticFiles/
こちらにある通りで、キャッシュを消して再読み込みすると反映されます。ブラウザ側の問題なのに、アプリ側をあちこち調べてしまいました。

0 件のコメント:

コメントを投稿