2016年末のPACKT 5ドルセールで買ったもの

まだ増えるかもだけど6冊も買ってしまった…。

しかし、これで30ドルとか安すぎ……!

QiitaのiOS その2 Advent Calendar 2016に投稿した

スクリーンショットもPlaygroundで作っちゃおう - Qiita

昨年の記事が別に好評を博していないのに続編を書く暴挙。

久々にブログをアップデート

あまりにもダサくて書く気がしなかったのと、Railsが古くなりすぎていたので少し整備した。
見た目はBootstrapをちゃんと使うように修正。(なぜかnavbarとか使わず独自のheaderを定義してた)
ソースの方は、ひとまずRails4の最新版にあげて、warning吐いてるようなGemをひと通りアップデートした。
暇を見つけてRails5にあげたい。

ついでにコメント一覧を付けてみたけど案の定テストコメントだけで悲しかった…。
(GitHubログインという高いハードルを設けたせいだと思いたい)

タイポがあったのにAirbrakeで通知されなかった

typoを含んだコードが動いてるとかテストどうなってんの?という話は置いておくとして。

準備

config/initializers/airbrake.rb
# コメントアウト
# c.ignore_environments = %w(development test)

通知されるパターン

class Foo
  def self.test
    raise 'bar'
    puts 'hello'
  end
$ ./bin/rails r "Foo.test"
/path/to/app/models/foo.rb:3:in `test': bar (RuntimeError)

通知されないパターン

class Foo
  def self.test
    bar
    puts 'hello'
  end
$ ./bin/rails r "Foo.test"
Please specify a valid ruby command or the path of a script to run.
Run 'bin/rails runner -h' for help.

どうやら、typo(NameError)の時はrunner側で何かしらされてるっぽい。

https://github.com/rails/rails/blob/master/railties/lib/rails/commands/runner/runner_command.rb#L34

rescue SyntaxError, NameError => error

resuceされてた。疑問解決。

Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

無料期間が終わるAWSから古いVPSにRailsプロジェクトを退避する作業をしていた。

$  RAILS_ENV=production rake db:create
Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file
#<Mysql2::Error: Can't initialize character set utf8mb4 (path: /usr/share/mysql/charsets/)>
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8mb4", "collation"=>"utf8mb4_general_ci", "pool"=>5, "userna
me"=>"user", "password"=>"pass", "socket"=>"/var/lib/mysql/mysql.sock", "database"=>"example_production", "host"=>ni
l}, {:charset=>"utf8mb4", :collation=>"utf8mb4_general_ci"}

utf8mb4が使えない…。
MySQLを5.1から5.5にあげて、mysql2 gemを入れなおしたら行けた。

$ sudo yum upgrade mysql --enablerepo=remi
$ bundle exec gem uninstall mysql2
$ bundle