This installation of RMagick was configured with ImageMagick x.x.x but ImageMagick x.y.z-a is in use.

$ ./bin/rails c
This installation of RMagick was configured with ImageMagick x.x.x but ImageMagick x.y.z-a is in use. (RuntimeError)
$ bundle uninstall rmagick
$ bundle

で直った。急になったのでびっくりした…。

content_forのflash引数を知らなかった

partialの中に、

- content_for(:foo) do
  ul
    li= 'bar'

= yeild(:foo)

みたいな記述があったんだけど、renderするたびにbarがlistが増殖していって???ってなった。

- content_for(:foo, flash: true) do

すれば解消した。

参考

Rails の content_for の初期化 [俺の備忘録]

Hello, Hakyll with GitHub Pages

関数型言語に少しでも慣れるため、これからGitHub Pagesで何か作る時は、Hakyll を使うのを自分に強制しようかな、と思っています。(思いましたが、その後、結局Jekyll使ってます。)

というわけでまずはhello worldから。

ローカルで動かす

インストール

https://www.haskell.org/platform/mac.html を入れる。
以降は、https://jaspervdj.be/hakyll/tutorials/01-installation.html を参考に。

$ ghc -V
The Glorious Glasgow Haskell Compilation System, version 7.10.3

$ cabal install hakyll

パスを通しておかないとhakyll-initなどが使えないので注意 ( http://qiita.com/JunKikuchi/items/8b82b6811687560d903d )

# ~/.bash_profile
export PATH="$HOME/Library/Haskell/bin:$PATH"
# source ~/.bash_profile

サイトの作成

$ hakyll-init hello-hakyll-with-gh-pages
$ cd hello-hakyll-with-gh-pages
$ ghc --make -threaded site.hs
$ ./site build

これで_site以下にサイトが構築される

$ ./site watch

すれば、http://localhost:8000/で見れるようになる。

Circle Ciを使ってdeploy(断念)

hslua-0.4.1のインストールがこけて断念したけど、一応メモを残しておく。
プロジェクトrepo(gh-pages)でやる前提。

http://www.stackbuilders.com/news/dr-hakyll-create-a-github-page-with-hakyll-and-circleci を参考にした。

Travis CIの場合は、https://imokuri123.com/blog/2015/04/create-github-pages-with-hakyll.html が日本語で参考になりそうだった。

masterブランチの作成(ソース管理用)

$ git init
$ git commit --allow-empty -m "Create master branch"
$ git remote add origin git@github.com:tnantoka/hello-hakyll-with-gh-pages.git
$ git push -u origin master

※ --orphanというのは他のブランチの歴史を引き継がないブランチ。http://d.hatena.ne.jp/eldesh/20120715/1342343316

gh-pagesブランチの作成(サイト公開用)

$ git checkout --orphan gh-pages
$ git commit --allow-empty -m "Create gh-pages branch"
$ git push origin gh-pages

gh-pagesを_siteとしてsubmoduleに追加

$ rm -rf _site
$ git checkout master
$ git submodule add -b gh-pages git@github.com:tnantoka/hello-hakyll-with-gh-pages.git _site
$ git commit -m "Add submodule at _site"
$ git push origin master

$ wget https://raw.githubusercontent.com/github/gitignore/master/Haskell.gitignore -O .gitignore
$ echo "_cache/" >> .gitignore 
$ echo "/site" >> .gitignore 

$ git add .
$ git push origin master

Circle CIでbuild

Circle CIで使えるHaskellの環境は、https://circleci.com/docs/environment#haskell に載ってる。

$ vim circle.yml
$ git add circle.yml
$ git commit -m "Configure CircleCI"
$ git push origin master

最終的に、
https://github.com/tnantoka/hello-hakyll-with-gh-pages/blob/master/circle.yml の内容でbuildしたが、先述の通り、hslua-0.4.1がインストールできなかったので、一旦断念。

ログはこちら。
https://circleci.com/gh/tnantoka/hello-hakyll-with-gh-pages/3

ローカルからdeploy

できればCIサーバからやりたかったけど、別にローカルからでも運用はできるので、https://github.com/tnantoka/hello-hakyll-with-gh-pages/blob/master/deploy.sh でdeployすることにした。

$ ./deply.sh

http://tnantoka.github.io/hello-hakyll-with-gh-pages/
無事動いた。

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