pythonの軽量WebフレームワークbottleでWebアプリっぽいものをぽちぽち作ってて、ある程度できたのでHerokuにデプロイしたところでハマった。8時間くらい!通勤中のググり時間入れると10時間いくかも?
問題解決のプロセスが悪かったのもあり(もっとgit使えるようになっておくと捗るよ、俺)、またPythonの勉強から始めたりしてたので無益でもなかったのでいいんだけど、一応メモっとく。
問題: ローカルでは動くのにherokuでは挙動がおかしい。
ページのボタン押すとデータがセットされる→リダイレクトで元ページに戻る。というページ内容が書き直されるようにしている部分(専門用語は知らない)で、再表示されるページが崩れる! 変数値のセットにglobal使ってたのでそれをクッキーに変えたりモジュールで外に出したり色々やってみたけど、崩れる。そしてボタンを押す度に変数の状態が変わっていく、ランダムで正しい状態に戻る時もある。パターン掴めない。
原因がbottleとherokuのどちらにあるのかわからないので、両方調べた。gunicornのせいかもと思って、waitressに浮気したりもした。jinja2のことを疑ったりもした。ごめん。結局、原因はherokuの WEB_CONCURRENCY
だった。
heroku config
で
WEB_CONCURRENCY: 3
となっていたので、昨日見たhttp://sessan.hatenablog.com/entry/2015/01/13/213226
を思い出して、heroku config:set WEB_CONCURRENCY=1
としてみた。直った!この歓びを誰にか伝えむ。
web (1X)ってなってるのに、デフォでWEB_CONCURRENCY: 3ってどうよ?