herokuのアップデートで動かなくなったWebサービスを直したときの話
前に日記を書いたときに作りはじめたWebサービス,YTJukeに手を加えようと思ったら,"Application Error"と表示されてうまく動作しない状態になっていたので,そこからもとの状態に戻したときの試行錯誤の話です.
直接ハマった所は1箇所だけで,何ともしょうもない話なのですが,
herokuにおけるデータベースのURL変数を,SHARED_DATABASE_URLとしていたのが良くなかった
ということでした.
当初,ログを読むと,こんなのが出ていました.
$ heroku logs ## 2012-12-26T10:58:24+00:00 app[web.1]: /app/app.js:20 ## 2012-12-26T10:58:24+00:00 app[web.1]: client.query("SELECT tablename from pg_tables where tablename = '" + baseTab ## 2012-12-26T10:58:24+00:00 app[web.1]: ^ ## 2012-12-26T10:58:24+00:00 app[web.1]: TypeError: Cannot call method 'query' of null
データベースへの接続ができていないとのことだったので,もしかして,postgres9.2にバージョンアップしたという件かと思ったのですが,違いました.
Heroku Postgres | Heroku Dev Center
公式によれば,process.env.DATABASE_URLと記述すべきとのことです.
以前は,SHARED_DATABASE_URLも,特に設定しなければこれと同じ値になっていたのでしょう.今は,変数自体が無いようでした.
$ heroku config | grep DATABASE ## DATABASE_URL: postgres://chkctcjn(アドレスが書かれていたが,略)
他にも,いくつか細々としたところでハマったので,一応書いておきます.
ローカル環境のnodeのバージョンをあげたので,依存関係がおかしくなっていた
これはpackage.jsonとnpmコマンドでいろいろ調整です.
バージョンが合っていないとこんなのが出るので,どちらかに合わせる.
$ npm install exress ## npm WARN engine express@2.4.7: wanted: {"node":">= 0.4.1 < 0.5.0"} (current: {"node":"v0.8.15","npm":"1.1.66"})
expressを最新版(3.0.5)にしたら仕様がいろいろと変わって動かなくなった
Express - api reference
express3になって,関数名やファイル構成など,仕様があちこち変わったみたいです.
私はlayout.ejsを読み込まない仕様になっていることに気づかずにハマりました.
package.jsonに,express2.5系を指定したら問題なく動作しました.
Heroku Toolbeltを使うようにしたら,tapsでのデータベース転送がうまくいかなくなった
(gem版とtapsの組み合わせは動作するので,移行などしなければハマることもなかったのですが...)
以前は,gem版のherokuを使っていて,tapsでデータベースを転送していました.
tapsを使って開発環境のデータベースをHerokuにインポートする - (゚∀゚)o彡 sasata299's blog
しかし,gem版のherokuをつかっていたら,こんなメッセージが出てきたので,Toolbeltに移行しました.
$ sudo gem install heroku ## ! The `heroku` gem has been deprecated and replaced with the Heroku Toolbelt. ## ! Download and install from: https://toolbelt.heroku.com ## ! For API access, see: https://github.com/heroku/heroku.rb
もう古いからToolbeltに乗り換えなさい,とのことです.
Heroku Toolbelt
で,DLしてインストール後,tapsを使ってみると,うまくいかない.
$ heroku db:push postgres://pgsqladmin:(パスワード)@localhost/ytplaydb --app ytjuke ## ! Taps Load Error: cannot load such file -- taps/operation ## ! You may need to install or update the taps gem to use db commands. ## ! On most systems this will be: ## ! ## ! sudo gem install taps
いや,インストールしてますけどもね.関連付けがうまくいっていないようです.
調べてみると,今は別の方法が推奨されているみたいです.
Using `pg:transfer` to Migrate Postgres Databases - Higher Order Heroku
これでやっと,うまくいきました.
本当にやりたかったメンテナンスは,これからです.