utf8mb4化したらtextカラムがmediumtextに変わっててびっくりした

カラムを追加する作業があった。
rails g migrationしてrake db:migrateしたら終わりー、と思ったら、

Annotated (8): ...

8!?今モデル1つ変えただけなんだけど…

$ git diff
--- a/db/schema.rb
+++ b/db/schema.rb

-    t.text     "title",         limit: 65535
-    t.text     "url",           limit: 65535
+    t.text     "title",         limit: 16777215
+    t.text     "url",           limit: 16777215

こんな感じで、limit指定してないtextカラムが軒並み変わってる。

$ rails db   
mysql> SHOW COLUMNS FROM tasks;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| title         | mediumtext   | YES  |     | NULL    |                |
| url           | mediumtext   | YES  |     | NULL    |                |

データベース上もそうなってる。

ちょっと調べたら、

http://beanidealisticrealist.hatenablog.com/entry/2013/05/14/MySQL%E3%81%A7%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%A8%E3%82%AB%E3%83%A9%E3%83%A0%E3%81%AE%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E4%B8%80%E6%8B%AC%E5%A4%89%E6%9B%B4

ということらしい。

意図しない型の変換に注意!

CONVERT TO CHARACTER SET を用いた場合、型が自動的に変換されてしまうことがあります。
たとえば、utf-8 から utf8mb4 に変更する場合は、text 型のカラムは自動的に mediamtext に変換されます。

確かに、少し前にutf8mb4に変えました。そしてそれはmigrationでやらなかったのでannotateも実行されておらず、今になって気づいたわけです…。

Unicornでtimeout (61s > 60s), killing

とても重い処理があって(あっちゃダメなんだけど)

2015/12/02 04:38:45 [error] 31572#0: *711812 upstream prematurely closed connection while reading response header from upstream, client: IPアドレス, server: example.com, request: "POST /path HTTP/1.1", upstream: "http://unix:/tmp/unicorn.socket:/path", host: "example.com", referrer: "https://example.com/"

でエラーに。

nginxの設定で、

proxy_read_timeout 180;

に伸ばしてみたけどダメ

E, [2015-12-02T04:38:45.284877 #21386] ERROR -- : worker=6 PID:17845 timeout (61s > 60s), killing
E, [2015-12-02T04:38:45.359676 #21386] ERROR -- : reaped #<Process::Status: pid 17845 SIGKILL (signal 9)> worker=6
I, [2015-12-02T04:38:48.954480 #21614]  INFO -- : worker=6 ready

あ、

# unicorn.rb
timeout 180

こっちでした。

http://unicorn.bogomips.org/Unicorn/Configurator.html#method-i-timeout

Unknown WatchConnectivity error

これが出てWatchシミュレータが起動しなくなり、困った。
シミュレータのデータをリセットしたら解消した。

apipie-railsのexamplesが"\x89" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)で生成できない

https://github.com/rails/activesupport-json_encoder
を入れたら解消した。
たぶん最新版のRailsだと発生しないんでしょう。

RailsでjQuery 2を使う

趣味で作るサイトとか、古いブラウザなんて気にしない場合、jQuery 1を読むのは無駄以外の何者でもない。

でもRailsはデフォルトで1を読む。

そんな時は、

app/assets/javascripts/application.js
-//= require jquery
+//= require jquery2

とすればいい。簡単。

ブラウザのコンソールなどで確認すると、

> $.fn.jquery
"2.1.3"

こうなるはず。

jquery-railsの4.0.0以上が必要