継続的ブロギング

今度こそは続けるブログ

Docker QuickStart Terminal(Docker Toolbox)でi/o timeout

環境

最近Docker Toolbox使ってDocker触ってないなあということで、久しぶりに触ってみました!
Docker QuickStart TerminalがiTermにも対応したらしいので、VirtualBoxと併せてアップデートして、Docker QuickStart Terminalを起動!
したのですが、下記エラーが出てうまく動かなくなってしまいました。。。

Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": dial tcp 192.168.99.100:2376: i/o timeout

いろいろ調べて、なんとか下記手順で動くようになりました!

$ docker-machine rm default
$ docker-machine create --driver virtualbox default
# .zshrcに追記
eval $(docker-machine env default)

ご参考まで。

参考

Pull Request本文のフォーマットを決めて、そのテンプレートをデフォルト表示

追記
(2015/12/14)こっちの方がいいかもですね。。。
Git のコミットメッセージをテンプレート化する - Qiita

初回の空コミットのコミットメッセージにテンプレートを入れるようにする

うちではWIP PRによる開発運用をしています。
PR本文のフォーマットは特に決まってませんが、

  1. フォーマット決めたらもっと捗るよね!
  2. フォーマットのテンプレート的なものをデフォルトで表示して、そこを埋めていく感じにすれば、より捗るよね!

ということになり、最初に作成する空コミットを、コミットメッセージにテンプレートを付けて作成するシェルを作りました。
そうすれば、PR作った時に、本文にテンプレートが表示されるというわけです。
やってることはかなり単純です。

#!/bin/sh

echo ${1:?"コミットメッセージを入力してください!"}

git commit --allow-empty -F- <<EOF
[WIP] $1

## 概要

## 仕様

## TODO

## その他

EOF
$ sh create_wip_commit.sh hoge機能実装

とりあえずこんな感じで実行して、プッシュ、PRを作成する感じです。
毎回このコマンド実行するのもちょっとダサいので、自分はgit aliasに設定しています。

思いつきでやったので、もっといい方法はありそうだけど。。。
他にいい方法知ってるよって方は教えて下さい!

iTunes Connectでユーザー追加できない(2015/10/14時点)

招待メールの「activate your account」を押しても、白画面になってしまいます。
9日くらいからずっとこの状態みたいです。
早く直してもらいたいですが、それまで待てないという方は以下の方法で一応解決できます。(試す方は自己責任でお願いします)

手順

  1. ChromeアクティベーションURLを開く
  2. デベロッパツールを開く(MAC→「Cmd-Alt-I」、Windows→「Ctrl-Shift-I」)
  3. Sourcesタブをクリック
  4. main.jsを開く( itunesconnect.apple.com/itc/static-resources/main.js )
  5. 20行目の "idmsauth-stable.corp.apple.com" を "idmsa.apple.com" に変更
  6. main.jsのソースを全てコピーする
  7. consoleタブを開く
  8. 6でコピーしたmain.jsを貼り付ける
  9. Enterを押す

参考

メールアドレスの取り扱いについて改めて調べてみた

メールアドレスの大文字小文字を区別するか、しないとかとかの話。
結局Railsではどう実装するのがいいのだろうか気になったので改めて調べてみました。

メールアドレスの大文字小文字は区別されないと考えて良い

  • メールサーバーの設定によるが、実際には区別しない設定にしているところが大半
  • 正確には、ドメイン名部分だけが大文字小文字を区別しない

DBによるインデックス管理方法の違い

  • MySQL
    • アルファベットの大文字小文字を区別しない
  • PostgreSQL
    • アルファベットの大文字小文字を区別する
    • lower関数を用いてインデックスを作成すれば、アルファベットの大文字小文字を区別しないようにできるが、Railsの標準的なやり方では関数を含むインデックスは作成できない

基本的には小文字に変換して登録しちゃってOK

上記のことから、小文字で登録するのが良さそう。
emailカラム一つだけ用意して、そこに小文字変換で登録していくスタイル。
Railsチュートリアル」でもそう。

今読んでいる『実践Ruby on Rails 4』ではemail_for_indexというカラムを別途用意していました。
emailカラムにはメールアドレスそのものを、email_for_indexには小文字に変換したメールアドレスを登録します。
登録したそのままのメールアドレスをViewに表示したかったので、今回はこちらを採用。

email_for_indexにインデックス追加
add_index :users, :email_for_index, unique: true

バリデーションすり抜けられた時の為に、UNIQUE制約も同時につけています。

モデルに諸々追加
# 一部抜粋

before_validation do
  self.email_for_index = email.downcase if email
end

validates :email, presence: true, email: { allow_blank: true }
validates :email_for_index, uniqueness: { allow_blank: true }
after_validation do
  if errors.include?(:email_for_index)
    errors.add(:email, :taken)
    errors.delete(:email_for_index)
  end
end

after_validationでは、HTMLフォームでemail属性に対して入力エラーメッセージを表示するために、エラーが起きている属性を入れ替えています。
errors.addの第二引数の:takenはuniquenessタイプのシンボルです。

参考

オススメ

もっと早くに出会いたかった。

Docker Toolbox使ってみたけど、エラーでちょっとハマった話

Docker Toolboxがリリース

Docker Toolbox | docker

ということで、Dockerはあまり触ったことがないのですが、『Dockerエキスパート養成読本』片手に入門がてら触ってみました。
しかし、初っ端からエラーでハマったのでメモ。

環境

① 「Docker Quickstart Terminal」を起動しても、エラーでVM立ち上がらない

Starting machine default...
exit status 1
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

下記URLを参考にVirtualBoxのTestBuild(5.0.3)をインストールしたら、起動するようになりました。

Docker-Machine : "Error creating machine: exit status 1" · Issue #1716 · docker/machine · GitHub

VM起動するようになったけど、docker runやimagesでエラー出る

 Post http:///var/run/docker.sock/v1.20/containers/create: dial unix /var/run/docker.sock: no such file or directory.
 * Are you trying to connect to a TLS-enabled daemon without TLS? 
 * Is your docker daemon up and running?
  1. Kitematicを立ち上げてみる。
    同じエラーがTOPに出てる。

  2. 「Delete VM and Retry Setup」ボタンをクリック。

  3. Sign in画面的なものが出れば成功。

参考

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)

Devise&OmniauthでFacebook認証したいけど、emailがnilで返ってきてハマった

追記
gemのアップデートで取れるようになりそうですね!
omniauth-facebook+GraphAPI ver 2.4でemailフィールドが取得されない件の対応 - Qiita

Railsで作っているサービスで、DeviseとOmniauthを使って認証系実装している時にちょっとハマったお話。

FacebookではEメールが普通に取得できるはずでは?

Twitterでは入ってこないが、Facebookでは下記のようにすればEメールが取得できるはず。

user.email = auth.info.email

しかし、nilで返ってくる。
auth.infoの中身を見ても、そもそもemailがない。

FacebookAPIが2.4にアップデートされたことが原因

OmniAuth: Overview · plataformatec/devise Wiki · GitHub

ここに書いてありました。

config.omniauth :facebook, "APP_ID", "APP_SECRET", scope: 'email', info_fields: 'email, name'

こう書けば取れるようになりました。