ïŒ2018幎çïŒ
ãã²ã«ã»ã°ãªã³ããŒã°
ããã¯ãFlask Mega-Tutorialsã·ãªãŒãºã®18çªç®ã®ããŒãã§ãããã®ã·ãªãŒãºã§ã¯ãHerokuã¯ã©ãŠããã©ãããã©ãŒã ã«ãã€ã¯ãããã°ããããã€ããŸãã
ãã¿ãã¬ã®äžã«ã¯ããã®2018幎ã·ãªãŒãºã®ãã¹ãŠã®èšäºã®ãªã¹ãããããŸãã
- 第1ç« ïŒHello worldïŒ
- 第2ç« ïŒãã³ãã¬ãŒã
- 第3ç« ïŒWebãã©ãŒã
- 第4ç« ïŒããŒã¿ããŒã¹
- 第5ç« ïŒãŠãŒã¶ãŒãã°ã€ã³
- 第6ç« ïŒãããã£ãŒã«ããŒãžãšã¢ãã¿ãŒ
- 第7ç« ïŒãšã©ãŒåŠç
- 第8ç« ïŒãµãã¹ã¯ã©ã€ããŒãé£çµ¡å ãããã³ãã¬ã³ã
- 第9ç« ïŒããŒãžããŒã·ã§ã³
- 第10ç« ïŒã¡ãŒã«ãµããŒã
- 第11ç« ïŒåæ§æ
- 第12ç« ïŒæ¥ä»ãšæå»
- 第13ç« ïŒI18nããã³L10n
- 第14ç« ïŒAjax
- 第15ç« ïŒã¢ããªã±ãŒã·ã§ã³æ§é ã®æ¹å
- 第16ç« ïŒå šææ€çŽ¢
- 第17ç« ïŒLinuxã®å±é
- 第18ç« ïŒHerokuã§ã®å±é ïŒãã®èšäºïŒ
- 第19ç« ïŒDockerã³ã³ãããŒã§ã®å±é
- 第20ç« ïŒJavaScriptããžãã¯
- 第21ç« ïŒãŠãŒã¶ãŒéç¥
- 第22ç« ïŒããã¯ã°ã©ãŠã³ãã¿ã¹ã¯
- 第23ç« ïŒã¢ããªã±ãŒã·ã§ã³ããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ïŒAPIïŒ
泚1ïŒãã®ã³ãŒã¹ã®å€ãããŒãžã§ã³ããæ¢ãã®å Žåã¯ããã¡ããã芧ãã ãã ã
泚2ïŒç§ïŒãã²ã«ïŒã®ä»äºãæ¯æããŠçªç¶å£°ãããããå ŽåããŸãã¯1é±éèšäºãåŸ ã€å¿èããªãå Žåãç§ïŒãã²ã«ã°ãªãŒã³ããŒã°ïŒã¯ãã®ã¬ã€ãã®å®å šçïŒè±èªïŒãé»åæžç±ãŸãã¯ãããªã®åœ¢åŒã§æäŸããŸãã 詳现ã«ã€ããŠã¯ã learn.miguelgrinberg.comãã芧ãã ãã ã
åã®èšäºã§ãPythonã¢ããªã±ãŒã·ã§ã³ããã¹ããããåŸæ¥ã®ãæ¹æ³ã玹ä»ããLinuxãµãŒããŒãžã®ãããã€ã®2ã€ã®å®äŸã玹ä»ããŸããã Linuxã·ã¹ãã ã䜿çšããŠããªãå Žåããã®ãããªå±éã«è²»ããããåŽåã¯äºæ³ããããããã«å€ãã£ãããã«æãããŸãããã¡ããããã£ãšç°¡åãªæ¹æ³ãããã¯ãã§ãã
ãã®ç« ã§ã¯ãã»ãšãã©ã®ç®¡çã¿ã¹ã¯ããµãŒãããŒãã£ã®ã¯ã©ãŠããã¹ãã£ã³ã°ãããã€ããŒã«äŸåãããŸã£ããç°ãªãã¢ãããŒãã玹ä»ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³èªäœã®äœæ¥ã«ããå€ãã®æéãè²»ããããšãã§ããŸãã
å€ãã®ã¯ã©ãŠããã¹ãã£ã³ã°ãããã€ããŒã¯ãWebã¢ããªã±ãŒã·ã§ã³ãå®è¡ãã管çãã©ãããã©ãŒã ãæäŸããŸãã ãããã®ãã©ãããã©ãŒã ã«ã¢ããªã±ãŒã·ã§ã³ããããã€ããããã«å¿ èŠãªã®ã¯ãå®éã®ã¢ããªã±ãŒã·ã§ã³ã ãã§ããããŒããŠã§ã¢ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã¹ã¯ãªããèšèªã€ã³ã¿ãŒããªã¿ãŒãããŒã¿ããŒã¹ãªã©ã§ãã ãµãŒãã¹ã«ãã£ãŠç®¡çãããŸãã ãã®ã¿ã€ãã®ãµãŒãã¹ã¯ã Platform as a ServiceãŸãã¯PaaSãšåŒã°ããŸã ã
é³ãè¯ãããŠçå®ã§ã¯ãªãã§ããããïŒ
Pythonã¢ããªã±ãŒã·ã§ã³ã«ãéåžžã«äŸ¿å©ãªäººæ°ã®ã¯ã©ãŠããµãŒãã¹ã§ããHerokuã«Microblogããããã€ããŸãã Herokuãéžãã çç±ã¯ã人æ°ãããã ãã§ãªããç¡æã¬ãã«ã®ãµãŒãã¹ãããããéããããã«ç§ããã©ããŒããŠå®å šãªå±éãå®äºããããšãã§ããããã§ãã
ãã®ç« ã®GitHubãªã³ã¯ïŒ Browse ã Zip ã Diff ã
Herokuã§ã®ãã¹ãã£ã³ã°
Herokuã¯ã2007幎6æã«ç»å Žããæåã®ã¯ã©ãŠããã©ãããã©ãŒã ã®1ã€ã§ãåœåã¯Rubyããã°ã©ãã³ã°èšèªã®ã¿ããµããŒãããŠããŸããããçŸåšãµããŒããããŠããèšèªã®ãªã¹ãã«ã¯ãJavaãNode.jsãScalaãClojureãGoãPHPããããŠãã¡ããPythonãå«ãŸããŠããŸãã
Webã¢ããªã±ãŒã·ã§ã³ã¯ã git
ããŒãžã§ã³ç®¡çããŒã«ã䜿çšããŠHerokuã«ãããã€ããããããã¢ããªã±ãŒã·ã§ã³ã¯gitãªããžããªã«ååšããå¿
èŠããããŸãã Herokuã¯ãã¢ããªã±ãŒã·ã§ã³ãèµ·åããæ¹æ³ã«ã€ããŠãã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒããã£ã¬ã¯ããªã§Procfileãšãããã¡ã€ã«ãæ¢ããŸãã Pythonãããžã§ã¯ãã®å ŽåãHerokuã«ã¯ãã€ã³ã¹ããŒã«ããå¿
èŠã®ãããã¹ãŠã®ã¢ãžã¥ãŒã«äŸåé¢ä¿ã®ãªã¹ããå«ãrequirements.txtãã¡ã€ã«ãå¿
èŠã§ãã ã¢ããªã±ãŒã·ã§ã³ãgitãä»ããŠHerokuãµãŒããŒã«ã¢ããããŒããããåŸãåºæ¬çã«ãã¹ãŠãå®è¡ããŸãããã¢ããªã±ãŒã·ã§ã³ããããã¯ãŒã¯ã«è¡šç€ºããããŸã§æ°ç§åŸ
ã€ã ãã§ãã æ¬åœã«ç°¡åã§ãã
Herokuã§ã¯ãå¿ èŠãªèšç®èœåãšã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªæéã«åºã¥ããŠãµãŒãã¹ã¬ãã«ãéžæã§ããŸãããŠãŒã¶ãŒããŒã¹ãæ¡å€§ããã«ã€ããŠãHerokuããdynoããšåŒã¶èšç®ãŠããããè¿œå è³Œå ¥ããå¿ èŠããããŸãã
Herokuãè©Šãæºåã¯ã§ããŸãããïŒ ããå§ããŸãããïŒ
Herokuã¢ã«ãŠã³ãã®äœæ
Herokuãžã®ãããã€ãå®äºããåã«ãã¢ã«ãŠã³ããååŸããå¿ èŠããããŸãã ãã®ããã heroku.comã«ã¢ã¯ã»ã¹ããŠç¡æã¢ã«ãŠã³ããäœæããŠãã ããã Herokuã«ç»é²ããŠãã°ã€ã³ãããšããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãäžèŠ§è¡šç€ºãããããã·ã¥ããŒãã«ã¢ã¯ã»ã¹ã§ããŸãã
Heroku CLIãã€ã³ã¹ããŒã«ãã
Herokuã¯ãWindowsãMac OS Xãããã³Linuxã§å©çšå¯èœãªHeroku CLIãšåŒã°ãããµãŒãã¹ãšå¯Ÿè©±ããããã®ã³ãã³ãã©ã€ã³ãæäŸããŸã ã ããã¥ã¡ã³ãã«ã¯ããµããŒããããŠãããã¹ãŠã®ãã©ãããã©ãŒã ã®ã€ã³ã¹ããŒã«æé ãå«ãŸããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ããããã€ããŠãµãŒãã¹ããã¹ãããå Žåã¯ãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããŠãã ããã
CLIãã€ã³ã¹ããŒã«ããåŸã«æåã«è¡ãã¹ãããšã¯ãHerokuã¢ã«ãŠã³ãã«ãã°ã€ã³ããããšã§ãã
$ heroku login
Heroku CLIã¯ãã¡ãŒã«ã¢ãã¬ã¹ãšã¢ã«ãŠã³ããã¹ã¯ãŒãã®å ¥åãæ±ããŸãã èªèšŒãããã¹ããŒã¿ã¹ã¯ãåŸç¶ã®ã³ãã³ãã§ä¿åãããŸãã
Gitã»ããã¢ãã
git
ããŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãHerokuã«ãããã€ããããã®åºç€ã§ããããããŸã ã€ã³ã¹ããŒã«ããŠããªãå Žåã¯ã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ã䜿çšã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§å©çšå¯èœãªããã±ãŒãžããªãå Žåã¯ãgit Webãµã€ãã«ã¢ã¯ã»ã¹ããŠã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãã§ããŸãã
ãããžã§ã¯ãã«git
ã䜿çšããçç±ã¯ãããããããŸãã Herokuã«ãããã€ããäºå®ãããå ŽåãHerokuã«ãããã€ããã«ã¯ã¢ããªã±ãŒã·ã§ã³ãgit
ãªããžããªã«ããå¿
èŠããããããå¥ã®HerokuããããŸãã ãã€ã¯ãããã°ã®ãã¹ãå±éãå®è¡ããå Žåã¯ãGitHubããã¢ããªã±ãŒã·ã§ã³ãè€è£œã§ããŸãã
$ git clone https://github.com/miguelgrinberg/microblog $ cd microblog $ git checkout v0.18
git checkout
ã³ãã³ãã¯ããã®ç« ã«å¯Ÿå¿ããå±¥æŽã§ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³åºå®ãã€ã³ããéžæããŸãã
ç§ã®ã³ãŒããããç¬èªã®ã³ãŒãã䜿çšãããå Žåã¯ã git init .
å®è¡ããŠç¬èªã®ãããžã§ã¯ããgit
ãªããžããªã«å€æã§ããŸãgit init .
æäžäœãã£ã¬ã¯ããªã§ïŒçŸåšã®ãã£ã¬ã¯ããªã«ãªããžããªãäœæããgitã®æ瀺ã§ããinit
åŸã®ç¹ã«æ³šæããŠãã ããïŒã
Herokuã¢ããªã±ãŒã·ã§ã³ã®äœæ
æ°ããã¢ããªã±ãŒã·ã§ã³ãHerokuã«ç»é²ããã«ã¯ãã«ãŒããã£ã¬ã¯ããªããapps:create
ã³ãã³ãã䜿çšããå¯äžã®åŒæ°ãšããŠã¢ããªã±ãŒã·ã§ã³ã®ååãæž¡ããŸãã
$ heroku apps:create flask-microblog Creating flask-microblog... done http://flask-microblog.herokuapp.com/ | https://git.heroku.com/flask-microblog.git
Herokuã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã«äžæã®ååãä»ããå¿
èŠããããŸãã äžèšã§äœ¿çšããflask-microblog
ãšããååã¯ãæ¢ã«äœ¿çšããŠãããã䜿çšã§ããŸããããã®ãããå¥ã®ãããã€ã¡ã³ããéžæããå¿
èŠããããŸãã
ãã®ã³ãã³ãã®åºåã§ãHerokuãã¢ããªã±ãŒã·ã§ã³ã«å²ãåœãŠãURLãšãã®gitãªããžããªãååŸããŸãã ããŒã«ã«gitãªããžããªã«ã¯ã heroku
ãšåŒã°ãããªã¢ãŒãæ¥ç¶ã»ããã¢ãããæ¢ã«ãããŸãã git remote
ã³ãã³ãã䜿çšããŠãååšããããšã確èªã§ããŸãã
$ git remote -v heroku https://git.heroku.com/flask-microblog.git (fetch) heroku https://git.heroku.com/flask-microblog.git (push)
gitãªããžããªã®äœææ¹æ³ã«ãã£ãŠã¯ãäžèšã®ã³ãã³ãã®åºåã«origin
ãšããå¥ã®ãªã¢ãŒããœãŒã¹ãå«ãŸããããšããããŸãã
ãšãã§ã¡ã©ã«ãã¡ã€ã«ã·ã¹ãã
Herokuãã©ãããã©ãŒã ã¯ãä»®æ³ãã©ãããã©ãŒã äžã§å®è¡ãããäžæãã¡ã€ã«ã·ã¹ãã ãå®è£ ãããšããç¹ã§ãä»ã®å±éãã©ãããã©ãŒã ãšã¯ç°ãªããŸãã ããã¯ã©ãããæå³ã§ããïŒ ã€ãŸããHerokuã¯ãã€ã§ãä»®æ³ãµãŒããŒããªã»ããã§ããããããµãŒããŒã¯ã¯ãªãŒã³ãªç¶æ ã«æ»ããŸãã ãã¡ã€ã«ã·ã¹ãã ã«ä¿åããããŒã¿ãä¿åããããšã¯æ³å®ã§ããŸãããå®éãHerokuã¯ãµãŒããŒãéåžžã«é »ç¹ã«åŠçããŸãã
ãããã®æ¡ä»¶äžã§äœæ¥ãããšãããã€ãã®ãã¡ã€ã«ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã§åé¡ãçºçããŸãã
- SQLiteããŒã¿ããŒã¹ãšã³ãžã³ã¯ãããã©ã«ãã§ãã£ã¹ã¯ãã¡ã€ã«ã«ããŒã¿ãæžã蟌ã¿ãŸã
- ã¢ããªã±ãŒã·ã§ã³ã®ãã°ã¯ãã¡ã€ã«ã·ã¹ãã ã«æžã蟌ãŸããŸã
- ã³ã³ãã€ã«ãããèšèªç¿»èš³ãªããžããªãããŒã«ã«ãã¡ã€ã«ã«ä¿åãããŸã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ããããã®3ã€ã®é åã«ã€ããŠèª¬æããŸãã
Heroku PostgresããŒã¿ããŒã¹ã§ã®äœæ¥
æåã®åé¡ã解決ããããã«ãå¥ã®ããŒã¿ããŒã¹ãšã³ãžã³ã«åãæ¿ããŸãã 第17ç« ã§ã¯ãMySQLããŒã¿ããŒã¹ã䜿çšããŠUbuntuå±éã®ä¿¡é Œæ§ãé«ããæ¹æ³ã説æããŸããã Herokuã«ã¯ç¬èªã®PostgresããŒã¹ã®ããŒã¿ããŒã¹ãµãŒãã¹ãããããããã¡ã€ã«ã«åºã¥ããŠSQLiteãä¿åããåé¡ãåé¿ããããã«ãHerokuã«åãæ¿ããŸãã
Herokuã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ããŒã¹ã¯ãåãHeroku CLIãå ±æããŸãã ãã®å Žåãç¡æã¬ãã«ã§ããŒã¿ããŒã¹ãäœæããŸãã
$ heroku addons:add heroku-postgresql:hobby-dev Creating heroku-postgresql:hobby-dev on flask-microblog... free Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pg:copy Created postgresql-parallel-56076 as DATABASE_URL Use heroku addons:docs heroku-postgresql to view documentation
æ°ããäœæãããããŒã¿ããŒã¹ã®URLã¯ãç°å¢å€æ°DATABASE_UR
Lã«æ ŒçŽãããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«äœ¿çšå¯èœã«ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãã§ã«ãã®å€æ°ã§ããŒã¿ããŒã¹URLãæ¢ããŠãããããããã¯éåžžã«äŸ¿å©ã§ãã
stdoutãžã®ãã°ã€ã³
Herokuã¯ãã¢ããªã±ãŒã·ã§ã³ãstdout
çŽæ¥I / Oãè¡ãããšãæåŸ
ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ãæšæºåºåã«åºåãããã®ã¯ãã¹ãŠä¿åããã heroku logs
ã³ãã³ãã䜿çšãããšãã«è¿ãããŸãã ãããã£ãŠãåãšåãããã«ã stdout
ã«æžã蟌ãå¿
èŠããããããã¡ã€ã«ã«æžã蟌ãå¿
èŠããããã瀺ãæ§æå€æ°ãè¿œå ããŸãã èšå®ã®å€æŽã¯æ¬¡ã®ãšããã§ãã
config.pyïŒstdoutã®ãã°ãªãã·ã§ã³ã
class Config(object): # ... LOG_TO_STDOUT = os.environ.get('LOG_TO_STDOUT')
次ã«ãã¢ããªã±ãŒã·ã§ã³ãã¡ã¯ããªé¢æ°ã§ããã®æ§æã確èªããŠãã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã®æ§ææ¹æ³ãç解ã§ããŸãã
app/__init__.py
ãŸãã¯ãã¡ã€ã«ã«ãã°ãèšé²ããŸãã
def create_app(config_class=Config): # ... if not app.debug and not app.testing: # ... if app.config['LOG_TO_STDOUT']: stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.INFO) app.logger.addHandler(stream_handler) else: if not os.path.exists('logs'): os.mkdir('logs') file_handler = RotatingFileHandler('logs/microblog.log', maxBytes=10240, backupCount=10) file_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]')) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) app.logger.info('Microblog startup') return app
ãã®ãããã¢ããªã±ãŒã·ã§ã³ãHerokuã§å®è¡ãããŠããããä»ã®æ§æã§ã¯å®è¡ãããŠããªãå Žåã LOG_TO_STDOUT
ç°å¢å€æ°ãå®çŸ©ããå¿
èŠããããŸãã Heroku CLIã¯ãå®è¡æã«äœ¿çšãããç°å¢å€æ°ãèšå®ããæ©èœãæäŸããããããããç°¡åã«ããŸãã
$ heroku config:set LOG_TO_STDOUT=1 Setting LOG_TO_STDOUT and restarting flask-microblog... done, v4 LOG_TO_STDOUT: 1
ã³ã³ãã€ã«ããã翻蚳
ããŒã«ã«ãã¡ã€ã«ããŒã¹ã®ãã€ã¯ãããã°ã®3çªç®ã®åŽé¢ã¯ãã³ã³ãã€ã«ãããèšèªãã¡ã€ã«ã®ç¿»èš³ã§ãã ãããã®ãã¡ã€ã«ããšãã§ã¡ã©ã«ãã¡ã€ã«ã·ã¹ãã ããæ¶ããªãããã«ããæãç°¡åãªãªãã·ã§ã³ã¯ãã³ã³ãã€ã«ãããèšèªãã¡ã€ã«ãGitãªããžããªã«è¿œå ããŠãHerokuã«ãããã€ãããåŸã«ã¢ããªã±ãŒã·ã§ã³ã®åæç¶æ ã®äžéšã«ãªãããã«ããããšã§ãã
ç§ã®æèŠã§ã¯ããããšã¬ã¬ã³ããªãªãã·ã§ã³ã¯ãHerokuãæäŸããèµ·åã³ãã³ãã«flask translate compile
ã³ãã³ããå«ããããšã§ããããã«ããããµãŒããŒãåèµ·åãããã³ã«ãããã®ãã¡ã€ã«ãå床ã³ã³ãã€ã«ãããŸãã ãŸã ããŒã¿ããŒã¹ã®ç§»è¡ãéå§ããå¿
èŠããããããèµ·åæé ã«ã¯è€æ°ã®ã³ãã³ããå¿
èŠã§ããããšãç¥ã£ãŠããããããã®æ¹æ³ã䜿çšããŸãã ãã®ããããã®åé¡ãèã«çœ®ããåŸã§Procfileãäœæãããšãã«åé¡ã«æ»ããŸãã
Elasticsearchã®ãã¹ãã£ã³ã°
Elasticsearchã¯Herokuãããžã§ã¯ãã«è¿œå ã§ããå€ãã®ãµãŒãã¹ã®1ã€ã§ãããPostgresãšã¯ç°ãªããHerokuãæäŸãããµãŒãã¹ã§ã¯ãªããHerokuãšé£æºããŠã¢ããªã³ãæäŸãããµãŒãããŒãã£ã§ãã ä»æ¥ïŒãããã®è¡ãæžããšãïŒãçµ±åãããelasticsearchãµãŒãã¹ã®3ã€ã®ç°ãªããããã€ããŒããããŸãã
Elasticsearchãèšå®ããåã«ãHerokuã§ã¯ããµãŒãããŒãã£ã®ã¢ããªã³ãã€ã³ã¹ããŒã«ããåã«ãç¡æã®éå±€å ã«ããå Žåã§ããã¢ã«ãŠã³ãã«ãªã³ã¯ãããã¯ã¬ãžããã«ãŒããå¿ èŠã§ããããšã«æ³šæããŠãã ããã Herokuã¯ã¬ãžããã«ãŒãã®è©³çŽ°ãæäŸããªãå Žåã¯ããã®ã»ã¯ã·ã§ã³ãã¹ãããããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ããããã€ã§ããŸãããæ€çŽ¢æ©èœã¯æ©èœããŸããã
ã¢ããªã³ãšããŠå©çšå¯èœãªElasticsearchãªãã·ã§ã³ã®ãã¡ãç¡æã®ã¹ã¿ãŒã¿ãŒãã©ã³ãä»å±ããSearchBoxãè©ŠããŠã¿ãããšã«ããŸããã ã¢ã«ãŠã³ãã«SearchBoxãè¿œå ããã«ã¯ãHerokuãžã®ãã°ã€ã³äžã«æ¬¡ã®ã³ãã³ããå®è¡ããå¿ èŠããããŸãã
$ heroku addons:create searchbox:starter
ãã®ã³ãã³ãã¯ãElasticsearchãµãŒãã¹ããããã€ãããµãŒãã¹ã®æ¥ç¶URLãã¢ããªã±ãŒã·ã§ã³ã«é¢é£ä»ããããç°å¢å€æ°SEARCHBOX_URL
ããŸãã ã¯ã¬ãžããã«ãŒããHerokuã¢ã«ãŠã³ãã«è¿œå ããªããšããã®ã³ãã³ãã¯å®è¡ãããªãããšãå床ãç¥ããããŸãã
第16ç« ãæãåºããšãç§ã®ã¢ããªã±ãŒã·ã§ã³ã¯ELASTICSEARCH_URLå€æ°ã§Elasticsearchæ¥ç¶URLãæ¢ããŠããã®ã§ããã®å€æ°ãè¿œå ããSearchBoxã«ãã£ãŠå²ãåœãŠãããæ¥ç¶URLã«èšå®ããå¿ èŠããããŸãã
$ heroku config:get SEARCHBOX_URL <your-elasticsearch-url> $ heroku config:set ELASTICSEARCH_URL=<your-elasticsearch-url>
ããã§ã¯ãæåã«Herokuã«SEARCHBOX_URL
ã®å€ãSEARCHBOX_URL
ããããã«äŸé Œãã次ã«åãå€ã«èšå®ãããELASTICSEARCH_URL
ãšããååã®æ°ããç°å¢å€æ°ãè¿œå ããŸããã
èŠä»¶ã®æŽæ°
Herokuã¯ã 15ç« ã§å®çŸ©ããããã«ã redependencies.txtãã¡ã€ã«ã«äŸåé¢ä¿ãããããšãæåŸ ããŠããŸã ã ããããHerokuã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ããã®ãã¡ã€ã«ã«2ã€ã®æ°ããäŸåé¢ä¿ãè¿œå ããå¿ èŠããããŸãã
Herokuã¯ç¬èªã®WebãµãŒããŒãæäŸããŠããŸããã 代ããã«ãã¢ããªã±ãŒã·ã§ã³ã$PORT
ç°å¢å€æ°ã§æå®ãããããŒãçªå·ã§ç¬èªã®WebãµãŒããŒãèµ·åããããšãæåŸ
ããŠããŸãã FlaskéçºWebãµãŒããŒã¯è·å Žã§ã®äœ¿çšã«ååãªä¿¡é Œæ§ããªããããPythonã¢ããªã±ãŒã·ã§ã³çšã«Herokuãæšå¥šãããµãŒããŒã§ããgunicornãå床䜿çšããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯PostgresããŒã¿ããŒã¹ã«ãæ¥ç¶ããŸãããã®ãããSQLAlchemyã§ã¯psycopg2
ããã±ãŒãžã®ã€ã³ã¹ããŒã«ãå¿
èŠã§ãã
gunicorn
ãšpsycopg2
äž¡æ¹ãrequirements.txtãã¡ã€ã«ã«è¿œå ããå¿
èŠããããŸãã
ãããã£ãŒã«
Herokuã¯ã¢ããªã±ãŒã·ã§ã³ã®å®è¡æ¹æ³ãç¥ãå¿
èŠãããããã®ããã«åœŒã¯ã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒããã£ã¬ã¯ããªã«ããProcfileãšãããã¡ã€ã«ã䜿çšããŸãã ãã®ãã¡ã€ã«ã®åœ¢åŒã¯åçŽã§ãåè¡ã«ã¯ããã»ã¹ã®ååãã³ãã³ãããã³ããã»ã¹ãéå§ããã³ãã³ããå«ãŸããŠããŸãã Herokuã§å®è¡ãããæãäžè¬çãªã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ã¯Webã¢ããªã±ãŒã·ã§ã³ã§ãããã®ã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ã®å Žåãããã»ã¹åã¯web
ãªããã°ãªããŸããã 以äžã«ããã€ã¯ãããã°ã®ProcfileãèŠãããšãã§ããŸãã
ProcfileïŒHeroku Procfileã
web: flask db upgrade; flask translate compile; gunicorn microblog:app
ããã§ã3ã€ã®ã³ãã³ãã®ã·ãŒã±ã³ã¹ãšããŠWebã¢ããªã±ãŒã·ã§ã³ãèµ·åããã³ãã³ããå®çŸ©ããŸããã ãŸããããŒã¿ããŒã¹ç§»è¡ã®æŽæ°ãéå§ãã次ã«èšèªç¿»èš³ãã³ã³ãã€ã«ããæåŸã«ãµãŒããŒãéå§ããŸãã
æåã®2ã€ã®ãµãã³ãã³ãã¯flask
ã³ãã³ãã«åºã¥ããŠããããã FLASK_APP
ç°å¢FLASK_APP
ãè¿œå ããå¿
èŠãããFLASK_APP
ã
$ heroku config:set FLASK_APP=microblog.py Setting FLASK_APP and restarting flask-microblog... done, v4 FLASK_APP: microblog.py
gunicorn
ã³ãã³ãgunicorn
ãUbuntuã®ãããã€ã«äœ¿çšãããã®ãããç°¡åã§ãããã®ãµãŒããŒã¯Herokuç°å¢ãšéåžžã«åªããçµ±åãåããŠããããã§ãã ããšãã°ãããã©ã«ãã§$PORT
ç°å¢å€æ°ãèæ
®ãããŸããããã»ã¹ã®æ°ãæå®ããããã«-w
ãã©ã¡ãŒã¿ãŒã䜿çšãã代ããã«ãherokuã¯WEB_CONCURRENCY
å€æ°ãè¿œå ããããšããå§ãããŸãã procfileãå€æŽããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®å±é
ãã¹ãŠã®æºåæé ãå®äºããŠããã®ã§ãå±éãéå§ããŸãã git push
ã³ãã³ãã¯ãå±éã®ããã«ã¢ããªã±ãŒã·ã§ã³ãHerokuãµãŒããŒã«ããŠã³ããŒãããããã«äœ¿çšãããŸãã ããã¯ãGitHubãŸãã¯å¥ã®ãªã¢ãŒãgitãµãŒããŒäžã®ããŒã«ã«gitãªããžããªã«å€æŽãæçš¿ãããããªãã®ã§ãã
ãããŠä»ãHerokuãã¹ãã£ã³ã°ã¢ã«ãŠã³ãã«ã¢ããªã±ãŒã·ã§ã³ãéä¿¡ããæãèå³æ·±ãéšåã«å°éããŸããã å®éã«ã¯éåžžã«åçŽã§ãã¢ããªã±ãŒã·ã§ã³ãHeroku gitãªããžããªã®ã¡ã€ã³ãã©ã³ãã«ããã·ã¥ããããã«git
ã䜿çšããå¿
èŠããããŸãã gitãªããžããªã®äœææ¹æ³ã«å¿ããŠããããè¡ãæ¹æ³ã«ã¯ããã€ãã®ãªãã·ã§ã³ããããŸãã ç§ã®v0.18
ã³ãŒãã䜿çšããå Žåã次ã®ããã«ããã®ã¿ã°ã«åºã¥ããŠãã©ã³ããäœæãããªã¢ãŒããã¹ã¿ãŒãã©ã³ãã«éä¿¡ããå¿
èŠããããŸãã
$ git checkout -b deploy $ git push heroku deploy:master
ãŸã èªåã®ãªããžããªã§äœæ¥ããŠããå Žåãã³ãŒãã¯ãã§ã«ã¡ã€ã³ãã©ã³ãã«ããå¯èœæ§ãé«ããããæåã«å€æŽãä¿®æ£ãããŠããããšã確èªããå¿ èŠããããŸãã
$ git commit -a -m "heroku deployment changes"
ãã®åŸã次ã®ããã«å±éãéå§ã§ããŸãã
$ git push heroku master
ãã©ã³ããã©ã®ããã«éä¿¡ããŠããHerokuãã次ã®åºåã衚瀺ãããŸãã
$ git push heroku deploy:master Counting objects: 247, done. Delta compression using up to 8 threads. Compressing objects: 100% (238/238), done. Writing objects: 100% (247/247), 53.26 KiB | 3.80 MiB/s, done. Total 247 (delta 136), reused 3 (delta 0) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Python app detected remote: -----> Installing python-3.6.2 remote: -----> Installing pip remote: -----> Installing requirements with pip ... remote: remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 57M remote: -----> Launching... remote: Released v5 remote: https://flask-microblog.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/flask-microblog.git * [new branch] deploy -> master
git push
ã³ãã³ãã§äœ¿çšããheroku
ã©ãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®äœææã«HEROKU CLIã«ãã£ãŠèªåçã«è¿œå ããããªã¢ãŒããªããžããªã§ãã deploy:master
åŒæ°ã¯ã deploy
ãã©ã³ããåç
§ããããŒã«ã«ãªããžããªããHerokuãªããžããªã®ã¡ã€ã³master
ãã©ã³ãã«ã³ãŒãã移åããããšãæå³ããŸãã ç¬èªã®ãããžã§ã¯ãã§äœæ¥ããå Žåã git push heroku master
ã§å€æŽãããã·ã¥ããå¯èœæ§ããããŸããããã¯ãããŒã«ã«master
ãã©ã³ããããã·ã¥ïŒããã·ã¥ïŒããŸãã ãã®ãããžã§ã¯ãã®æ§ææ¹æ³ã«ãããç§ã¯master
ã§ã¯ãªããã©ã³ããéä¿¡ããŸãããHerokuãå±éã®ããã«åãå
¥ããå¯äžã®ãã©ã³ãã§ãããããHerokuåŽã®å®å
ãã©ã³ãã¯åžžã«master
ã§ããå¿
èŠããããŸãã
ããã§ãã¢ããªã±ãŒã·ã§ã³ãäœæããããŒã ã®åºåã§æå®ãããURLã«ã¢ããªã±ãŒã·ã§ã³ããããã€ããå¿ èŠããããŸãã ç§ã®å ŽåãURLã¯https://flask-microblog.herokuapp.comã ã£ãã®ã§ãããã¯ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããããã«å ¥åããå¿ èŠããããã®ã§ãã
å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®ãã°ãšã³ããªã衚瀺ããã«ã¯ã heroku logs
ã³ãã³ãã䜿çšããŸãã ããã¯ãäœããã®çç±ã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åããªãå Žåã«åœ¹ç«ã¡ãŸãã ãšã©ãŒããã£ãå Žåããããã¯ãã°ã«èšé²ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®æŽæ°ãå±éãã
ã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ããããã€ããã«ã¯ãæ°ããã³ãŒãã§git push
ã³ãã³ããå®è¡ããã ãã§ãã ããã«ãããå±éããã»ã¹ãç¹°ãè¿ãããå€ãå±éãç¡å¹ã«ãªããæ°ããã³ãŒãã«çœ®ãæããããŸãã Procfileã®ã³ãã³ãã¯ãæ°ããå±éã®äžéšãšããŠå床å®è¡ããããããããã»ã¹äžã«æ°ãã移è¡ãŸãã¯ããŒã¿ããŒã¹å€æãæŽæ°ãããŸãã