@kyanny's blog

私は天才ではありません。ただ、人より長く一つの事と付き合っていただけです - アインシュタイン

個人 Heroku アカウント整理

cedar-14 は退役するよとか mLab MongoDB は退役するよとかのお知らせを無視し続けていたけど重い腰が上がったタイミングだったので整理した。

基本的にほとんど使ってないものばかりだったのでぽちぽちと削除した。

少し苦労した点

cedar-14 から heroku-18 にアップグレードする

dashboard から stack を upgrade しても、次回デプロイ時の更新予約なので結局 git push が必要。

$ heroku git:clone my-app-name
$ heroku apps:stack:set heroku-18
$ git commit --allow-empty -m 'force deploy'
$ git push heroku master

↑でうまくいきそうだが、ダメだった。デプロイ中に ruby 2.0.0 を使おうとして、 heroku-18 スタックには ruby 2.0.0 はありません、というエラーで失敗する。 heroku-16 でも同様。

Gemfile / Gemfile.lock では ruby バージョンを指定しておらず、 .ruby-version の類もなかったが、現行のコンテナで動いてる ruby のバージョンを内部的に知っていて未指定ならば同じのを使おうとする挙動のようだ。アップグレード先の stack のデフォルトバージョンを使うものかと思ったが違うらしい。

結局、こんな感じの手順で無事 heroku-18 にアップグレードできた。

$ echo "ruby '2.6.6'" >> Gemfile
$ bundle install
$ git add .
$ git commit -m 'Use ruby 2.6.6'
$ git push heroku master

なお ruby 2.6.6 は heroku-18 スタックのデフォルトバージョンとのこと。

bamboo-ree-1.8.7 から heroku-18 にアップグレードする

なんと bamboo (!) を使っているアプリがあった。 cedar の前。 ree-1.8.7 からしてもはや懐かしい。

こいつは bamboo stack のコンテナ自体がすでに消えてしまっていて、アプリのメタデータはあるが実体は存在しなかった。 heroku git:clone することもできない。当然 push もできないし、 rename もできない。何もできない。

幸い GitHub に元データはあったので、新しいアプリを作って、古いアプリは仕方ないので削除し、新しいアプリを古いアプリ名に rename した。

なおこのアプリは #shibuyarblunch のアーカイブとして動かしていたものだった。

rack 1.5.2 から 2.1.4 にアップグレードする

Security alert が出ていたので新しめの rack にアップグレードしたら rackup できなくなった。以下のようなエラーが出た。

$ bundle exec rackup
bundler: failed to load command: rackup (/Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/bin/rackup)
TypeError: no implicit conversion of Array into String
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/files.rb:25:in `expand_path'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/files.rb:25:in `initialize'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/static.rb:103:in `new'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/static.rb:103:in `initialize'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:102:in `new'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:102:in `block in use'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:171:in `block in to_app'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:171:in `each'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:171:in `inject'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:171:in `to_app'
  /Users/kyanny/workspace/heroku/shibuyarblunch/config.ru:14:in `<main>'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:65:in `eval'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:65:in `new_from_string'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:59:in `load_file'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/builder.rb:40:in `parse_file'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/server.rb:351:in `build_app_and_options_from_config'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/server.rb:251:in `app'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/server.rb:424:in `wrapped_app'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/server.rb:314:in `block in start'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/server.rb:381:in `handle_profiling'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/server.rb:313:in `start'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/lib/rack/server.rb:170:in `start'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rack-2.1.4/bin/rackup:5:in `<top (required)>'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/bin/rackup:23:in `load'
  /Users/kyanny/.anyenv/envs/rbenv/versions/2.6.6/bin/rackup:23:in `<top (required)>'

byebug などを仕込もうにもうまくいかず苦労したが、結局地道に config.ru を一行ずつアンコメントしてダメになる箇所を特定して、ドキュメントの設定例と付き合わせて書き直したら直った。

github.com