CircleCI でデプロイのタイムアウト時間を延長する

  • デプロイのデフォルトは10分
  • 伸ばす場合は次のようにする
  • bundle exec ... の次はインデント2つにしないとダメ
deployment:
  production:
    branch: master
    commands:
      - bundle exec cap production deploy:
          timeout: 1500

Note that YAML is very strict about indentation each time you add a new property. For that reason, modifiers must be indented one level from their command. In the following example, we treat the bundle install command as a key, with timeout, environment, and pwd as the command's hash values.

Configuring CircleCI - CircleCI

sendgrid でメール受信することができる

  • sendgrid はメール受信系の機能を提供していないと思っていたけど、どうやら出来るっぽい。
  • 公式のドキュメント だと、lite プラン以外で使えます!って書いてあるので heroku の free なやつでは使えないかな?と思ったけど設定画面開けたので使えそう

sendgrid/sendgrid-parse-api-example - Buttons - Heroku Elements

cells-hamlit が使えるようになりそう

  • cells で haml を使いたい場合は cells-haml という gem を使う必要があった
  • しかし、cells-haml は haml の特定リビジョンに dependency が固定されていて辛い
    • このリビジョンの haml だと brakeman がこける
  • cells-hamlit を使うと上記の問題を解決出来るし速くなって良い感じ
    • しかし、リリースされてないので cells の master の最新を使う必要がある
  • とりあえず次のようにした
gem 'cells-hamlit'
gem 'cells', github: 'apotonick/cells'
gem 'hamlit'
gem 'hamlit-block'

だがしかし

cells 部分は動いたが、既存の view が動かなくなったので一旦休み。

Problem with block rendering · Issue #1 · hamlit/hamlit-block

追記

hamlit 作者の k0kubun さんからメンションいただいた。

気分的に最新使いたかったので次のように対応。想定通り動くようになった (( ⁰⊖⁰)/)

# 参照しているブランチがマージされたら本家に参照を戻す
gem 'cells-hamlit', github: 'k0kubun/cells-hamlit', branch: 'output_buffer'
gem 'cells', github: 'apotonick/cells'
gem 'hamlit'

複数人数でiOSアプリを実機確認したい場合

Xcode 7.2.1 です

  • apple developer 上で新しい端末のUUIDを登録する
  • provisioning file を更新する
  • provisioning file を apple developer からダウンロードして渡す
  • キーチェーンの証明書セクションから開発者用の証明書を選択し、p12ファイルで書き出す
    • パスワードを設定する
  • p12ファイルを渡す
    • パスワードも一緒に
  • Xcode の General -> Team を None にする
    • これ本当に正しいのかわからない

参考

iOSアプリのプロビジョニング周りを図にしてみる - Qiita

同じ rake タスクを二ヶ所で書いた時の挙動について

annotate_models のコード見ていたら、次のようなコードが書かれていて、実際の db:migrate のタスクを上書きしてるのかなあ…だとしたら実際の db:migrate の処理どこ行ったんだろうと思った。

namespace :db do
  [:migrate, :rollback].each do |cmd|
    task cmd do
      Rake::Task['set_annotation_options'].invoke
      Annotate::Migration.update_annotations
    end
  # ...
end

ちゃんと調べたら、同じrakeタスクは複数定義すると、両方実行される仕様っぽいですね。知らなかった

task :hoge do
  puts 'hoge'
end

task :hoge do
  puts 'fuga'
end

rake hoge とすると

hoge 
fuga

と出力される

miuchee を heroku 環境に移行した

miuchee を heroku に移行したメモです。

移行理由

  • @mkouhei さんのサーバ(さくら)を仮想マシン環境で使わせてもらっていた
    • さくら環境要因で時折メンテが必要になっていた
  • 現状の heroku なら無料で使えそうな状況である
    • sendgrid は無料で毎日400通メールが送れる
    • 無料で一日 18h までしかサーバが動かせないが、基本バックグラウンドで動かすサービスなのでそれほど問題ない
  • (個人的に) カジュアルに Ruby のバージョンをあげたり、デプロイしたりできる環境の方が扱いやすい

移行メモ

  • 移行前、 Ruby 1.9.3, Rails 3.2.12 であった
  • そのままのバージョンで heroku に移行しようかと思ったが、そもそも Ruby 1.9.3 環境をローカルに用意するのも大変
    • Ruby のバージョンを上げると gem も動かなくなったりする
  • どうせ手間がかかるなら最新にするのが心の健康によい
  • RSpec のバージョンアップ、yujinakayama/transpec が活躍した
  • 段階的に Rails 4.0, 4.1, 4,2 と上げていった
  • 4.0 に上げた時点で、Rails がActiveRecord の size メソッドの落とし穴 - おもしろwebサービス開発日記チラシの裏 に書いてあるような仕様に変わったようで関連する箇所が壊れた
  • テスト通す → warning消す → バージョン上げるの繰り返し
  • あとは gem 関連でいくつかハマった気がするけど、基本的にgemを最新にしたら直った気がする
  • ついでなので CI 環境や自動デプロイ、バックグラウンド用にRedis を用意したり、サーバを puma にしたりなど今どきの環境に合わせた
    • どっちかというとこっちのほうが時間かかったかも

所感

それほど大きいサービスではないのもあるけど、Rails 3.2 から 4.2 へのバージョンアップはそれほど苦ではなかった印象。RSpec も transpec 使えばそれほど大変じゃない。

ただいきなりではなく、少しずつバージョンアップしていくのが一番いいと思います…><教訓を活かして packsaddle/ruby-saddlerwillnet/herobu で定期的に bundle update するようにして現状対応しています

Intellij で Rails 開発をするときの注意点

vendor/bundle を使わないこと。

  • 検索に gem のコードが交じる
  • gem に jruby用のコードがあると、java 系のプロジェクトとして判断されるようで普通の Rails アプリとして認識しない

vendor/bundle を無視する設定にすればよいかと思いきや、gem を認識しないのでコード解析的なやつがうまく動かない